优化 gxpt 父项目 pom 配置

  1. 云栖社区>
  2. 博客>
  3. 正文

优化 gxpt 父项目 pom 配置

龙轩8023 2014-01-12 23:13:16 浏览470
展开阅读全文

【问题】

              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    

 

网友评论

登录后评论
0/500
评论
龙轩8023
+ 关注