使用maven管理项目有一个好处是就是能够针对不一样的环境使用不一样的编译打包设置,方便了多环境下的打包部署,通常咱们开发项目都会有至少开发环境和正式环境两个,针对这两个环境的配置信息也会有所不一样,好比数据库的配置等。咱们能够使用maven的profile定义来进行区分,好比咱们在项目的pom文件中定义以下片断:mysql
<project>sql
<modelVersion>4.0.0</modelVersion>数据库
<groupId>cc.mzone</groupId>maven
<artifactId>myjar</artifactId>ui
<version>0.1</version>url
<packaging>jar</packaging>spa
<build>orm
<resources>开发
<resource>部署
<directory>src/main/resources</directory>
<includes>
<include>*.*</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
</build>
<properties>
<jdbc.url>jdbc:mysql://localhost:3306/abc</jdbc.url>
<jdbc.username>root</jdbc.username>
<jdbc.password>root</jdbc.password>
</properties>
<profiles>
<profile>
<id>product</id>
<properties>
<jdbc.url>jdbc:mysql://localhost:3306/abc123</jdbc.url>
<jdbc.username>rootuser</jdbc.username>
<jdbc.password>rootpwd</jdbc.password>
</properties>
</profile>
</profiles>
</project>
这里咱们在pom文件中定义了数据库的相关配置,同时定义了一个profile,其id为product,同时在这个profile中也定义了数据库的相关配置。这样咱们使用mvn package命令时就能够使用默认的jdbc设置,当咱们使用mvn package -P product时maven就会自动使用id为product的profile中的数据库配置,这个是maven读取属性配置文件的覆盖。
而后再看pom文件中的resources段的配置:
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>*.*</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
其中最重要的是<filtering>true</filtering>这段,这个配置的意思是过滤上面指定属性文件中的占位符,占位符是${变量名称}这样的形式,maven会自动读取配置文件,而后解析其中的占位符,使用上面pom文件中定义的属性进行替换。咱们能够在src/main/resources下定义一个jdbc.properties配置文件,内容以下:
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=${jdbc.url}
jdbc.username=${jdbc.username}
jdbc.password=${jdbc.password}
执行的效果以下:
## 使用默认的配置信息
mvn clean package
## 使用product环境的配置信息
mvn clean package -P product
分两次执行上面的命令后,而后到项目的target目录下查看打包后的结果,能够看到jdbc.properties文件的内容随着打包的参数不一样而变化了,从而也就实现了咱们多环境的配置自动打包了。