标签:maven最佳实践
1、依赖管理(Dependency management)
下面的例子中,你会注意到每个依赖的版本号(version)直接写死,而且定义在应用级别pom文件中:
<dependencies> <dependency> <groupId>com.nimbusds</groupId> <artifactId>nimbus-jose-jwt</artifactId> <version>2.26</version> </dependency> <dependency> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> <version>1.2</version> </dependency> </dependencies>
<dependencyManagement> <dependencies> <dependency> <groupId>com.nimbusds</groupId> <artifactId>nimbus-jose-jwt</artifactId> <version>2.26</version> </dependency> <dependency> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> <version>1.2</version> </dependency> </dependencies> </dependencyManagement>
一旦你在dependencyManagement部分定义了依赖(如上面代码所示),用到时候,只需配置依赖的groupId和artifactId部分。如某个应用级别的pom所引用父pom定义管理dependencyManagement所管理的依赖时:
<dependencies> <dependency> <groupId>com.nimbusds</groupId> <artifactId>nimbus-jose-jwt</artifactId> <dependency> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> </dependency> </dependencies>
这个管理也可以用到pom文件中pluginss部分。
2、定义父pom模块。
在多模块项目中,共享者许多pom中的配置,比如依赖的版本号、插件、属性部分、仓库部分等。
最好的方法是只定义一份管理它们,这就需要创建单独的父模块及pom文件。
比如:http://svn.apache.org/repos/asf/axis/axis2/java/core/trunk/modules/parent/pom.xml。
有些项目把父pom文件放到根目录(并不是父模块中)。效果一样,第一种方法比较常用。
3、pom属性(POM properties)
Maven应用中pom文件内有6类属性。
? Built-in properties
? Project properties
? Local settings
? Environment variables
? Java system properties
? Custom properties
推荐用属性配置,而不是硬编码这些值。
如:
http://svn.apache.org/repos/asf/axis/axis2/java/core/trunk/modules/distribution/pom.xml
project
<dependencies> <dependency> <groupId>org.apache.axis2</groupId> <artifactId>axis2-java2wsdl</artifactId> <version>${project.version}</version> </dependency> <dependency> <groupId>org.apache.axis2</groupId> <artifactId>axis2-kernel</artifactId> <version>${project.version}</version> </dependency> <dependency> <groupId>org.apache.axis2</groupId> <artifactId>axis2-adb</artifactId> <version>${project.version}</version> </dependency> </dependencies>
groupId 上面的还不是最完美的,进一步的改进如下:
<dependencies> <dependency> <groupId>${project.groupId}</groupId> <artifactId>axis2-java2wsdl</artifactId> <version>${project.version}</version> </dependency> <dependency> <groupId>${project.groupId}</groupId> <artifactId>axis2-kernel</artifactId> <version>${project.version}</version> </dependency> <dependency> <groupId>${project.groupId}</groupId> <artifactId>axis2-adb</artifactId> <version>${project.version}</version> </dependency> </dependencies>
下面列出了一些maven定义的项目相关的属性:
? project.version: This refers to the value of the version element of the project POM file
? project.groupId: This refers to the value of the groupId element of the project POM file
? project.artifactId: This refers to the value of the artifactId element of the project POM file
? project.name: This refers to the value of the name element of the project POM file
? project.description: This refers to the value of the description element of the project POM file
? project.baseUri: This refers to the path of the project‘s base directory
环境变量也可以用env前缀读取,比如${env.M2_HOME}会返回Maven home路径。${env.JAVA_HOME}返回java home路径。
Maven支持我们自定义属性,一把我们用于定义依赖版本号。如下:
<properties> <rampart.version>1.6.1-wso2v10</rampart.version> <rampart.mar.version>1.6.1-wso2v10</rampart.mar.version> <rampart.osgi.version>1.6.1.wso2v10</rampart.osgi.version> </properties>
我们就可以这样用了:
<dependency> <groupId>org.apache.rampart.wso2</groupId> <artifactId>rampart-core</artifactId> <version>${rampart.version}</version> </dependency>
未完,待续。。。。
参考:Mastering Apache Maven 3
Enhance developer productivity and address exact enterprise build requirements by extending Maven
标签:maven最佳实践
原文地址:http://blog.csdn.net/doctor_who2004/article/details/46482825