【问题】
gxpt 父项目中的 pom 文件,每个人 checkout 下来,都需要手动修改 java.home 和 jboss.home 的路径。如图:
这样改起来就太麻烦了。所以现在采用一种统一的办法来设定。以后 checkout 出来的,可以不用再修改这两个地址。
【做法】
这里不再填写具体路径,而是获取环境变量的值,只要在环境变量中设置了这两个值,就不用再在 pom 中修改了。如图所示:
【资料拓展】
http://blog.csdn.net/sin90lzc/article/details/7552033
Maven 内置了三大特性:属性、 Profile 和资源过滤来支持构建的灵活性。
事实上有六种类型的 Maven 属性:
内置属性:主要有两个常用内置属性 ——${basedir} 表示项目根目录,即包含 pom.xml 文件的目录 ;${version} 表示项目版本。
POM 属性: pom 中对应元素的值。例如 ${project.artifactId} 对应了 <project><artifactId> 元素的值。具体有哪些 POM 属性可以用,可以查看本页末的附件—— 超级 POM
自定义属性:在 pom 中 <properties> 元素下自定义的 Maven 属性。例如
1. <project>
2. <properties>
3. <my.prop> hello </my.prop>
4. </properties>
5. </project>
Settings 属性:与 POM 属性同理。如 ${settings.localRepository} 指向用户本地仓库的地址。
Java 系统属性:所有 Java 系统属性都可以使用 Maven 属性引用,例如 ${user.home} 指向了用户目录。可以通过命令行 mvn help:system 查看所有的 Java系统属性
环境变量属性:所有环境变量都可以使用以 env. 开头的 Maven 属性引用。例如 ${env.JAVA_HOME} 指代了 JAVA_HOME 环境变量的值。也可以通过命令行 mvn help:system 查看所有环境变量。
默认情况下, Maven 属性只有在 POM 中才会被解析。资源过滤就是指让 Maven 属性在资源文件 (src/main/resources 、 src/test/resources) 中也能被解析。
在 POM 中添加下面的配置便可以开启资源过滤
1. <build>
2. <resources>
3. <resource>
4. <directory> ${project.basedir}/src/main/resources </directory>
5. <filtering> true </filtering>
6. </resource>
7. </resources>
8. <testResources>
9. <testResource>
10. <directory> ${project.basedir}/src/test/resources </directory>
11. <filtering> true </filtering>
12. </testResource>
13. </testResources>
14. </build>
从上面的配置中可以看出,我们其实可以配置多个主资源目录和多个测试资源目录。
Maven 除了可以对主资源目录、测试资源目录过滤外,还能对 Web 项目的资源目录 ( 如 css 、 js 目录 ) 进行过滤。这时需要对 maven-war-plugin 插件进行配置
1. <plugin>
2. <groupId> org.apache.maven.plugins </groupId>
3. <artifactId> maven-war-plugin </artifactId>
4. <version> 2.1-beta-1 </version>
5. <configuration>
6. <webResources>
7. <resource>
8. <filtering> true </filtering>
9. <directory> src/main/webapp </directory>
10. <includes>
11. <include> **/*.css </include>
12. <include> **/*.js </include>
13. </includes>
14. </resource>
15. </webResources>
16. </configuration>
17. </plugin>
每个 Profile 可以看作是 POM 的一部分配置,我们可以根据不同的环境应用不同的 Profile ,从而达到不同环境使用不同的 POM 配置的目的。
profile 可以声明在以下这三个文件中:
pom.xml :很显然,这里声明的 profile 只对当前项目有效
用户 settings.xml : .m2/settings.xml 中的 profile 对该用户的 Maven 项目有效
全局 settings.xml : conf/settings.xml ,对本机上所有 Maven 项目有效
非常值得注意的一点是, profile 在 pom.xml 中可声明的元素在 settings.xml 中可声明的元素是不一样的:
profile 在 pom.xml 中可声明的元素:
1. <project>
2. <repositories></repositories>
3. <pluginRepositories></pluginRepositories>
4. <distributionManagement></distributionManagement>
5. <dependencies></dependencies>
6. <dependencyManagement></dependencyManagement>
7. <modules></modules>
8. <properties></properties>
9. <reporting></reporting>
10. <build>
11. <plugins></plugins>
12. <defaultGoal></defaultGoal>
13. <resources></resources>
14. <testResources></testResources>
15. <finalName></finalName>
16. </build>
17. </project>
profile 在 settings.xml 中可声明的元素:
1. <project>
2. <repositories></repositories>
3. <pluginRepositories></pluginRepositories>
4. <properties></properties>
5. </project>
有多种激活 Profile 的方式:
1. 命令行方式激活,如有两个 profile id 为 devx 和 devy 的 profile :
1. mvn clean install -Pdevx,devy
2. settings 文件显式激活
1. <settings>
2. ...
3. <activeProfiles>
4. <activeProfile> devx </activeProfile>
5. <activeProfile> devy </activeProfile>
6. </activeProfiles>
7. ...
8. </settings>
1. 系统属性激活,用户可以配置当某系统属性存在或其值等于期望值时激活 profile ,如:
1. <profiles>
2. <profile>
3. <activation>
4. <property>
5. <name> actProp </name>
6. <value> x </value>
7. </property>
8. </activation>
9. </profile>
10. </profiles>
不要忘了,可以在命令行声明系统属性。如:
11. mvn clean install -DactProp=x
这其实也是一种从命令行激活 profile 的方法,而且多个 profile 完全可以使用同一个系统属性来激活。别忘了,系统属性可以通过 mvn help:system 来查看
1. 操作系统环境激活,如
1. <profiles>
2. <profile>
3. <activation>
4. <os>
5. <name> Windows XP </name>
6. <family> Windows </family>
7. <arch> x86 </arch>
8. <version> 5.1.2600 </version>
9. </os>
10. </activation>
11. </profile>
12. </profiles>
这里的 family 值包括 Window 、 UNIX 和 Mac 等,而其他几项对应系统属性的 os.name 、 os.arch 、 os.version
1. 文件存在与否激活, Maven 能根据项目中某个文件存在与否来决定是否激活 profile
1. <profiles>
2. <profile>
3. <activation>
4. <file>
5. <missing> x.properties </missing>
6. <exists> y.properties </exists>
7. </file>
8. </activation>
9. </profile>
10. </profiles>
Notice :插件 maven-help-plugin 提供了一个目标帮助用户了解当前激活的 profile :
1. mvn help:active-profiles
另外还有一个目标来列出当前所有的 profile :
1. mvn help:all-profiles