使用Maven来构建应用程序,可以非常方便地管理应用相关的资源。众所周知,应用程序中涉及到的一些依赖关系,如Java应用程序依赖jar文件,如果只是手动找到相应的资源,可能需要花费一些时间。而且,即使已经积累了库文件,在未来应用程序升级以后,还要考虑到依赖库文件的升级情况,再次搜索收集。
还有一个问题,对应用程序依赖文件的管理是个非常复杂工作,占用存储空间不说,还可能因为应用之间的版本问题导致依赖冲突。使用Maven的pom模型来构建应用程序,可以更加有效地的管理,而且配置内容非常清晰(有时多了,可能pom文件显得有点臃肿)。
下面将常用的Maven配置,整理如下,以备参考。首先,整理一个简单的目录,作为快速查询之用:
- 设置字符集
- 拷贝src/main/resources/资源文件
- 编译代码
- 、编译打包成jar文件
- 构建测试用例配置
- 输出依赖jar文件到指定目录
- 配置指定的repository
- 将应用及其依赖jar文件打成一个jar文件
具体配置的详细内容,如下所示:
1、设置字符集
2 | < project.build.sourceEncoding >UTF-8</ project.build.sourceEncoding > |
在需要设置字符集的地方,引用${project.build.sourceEncoding}即可。
2、拷贝src/main/resources/资源文件
05 | < groupId >org.apache.maven.plugins</ groupId > |
06 | < artifactId >maven-resources-plugin</ artifactId > |
07 | < version >2.5</ version > |
10 | < id >copy-resources</ id > |
11 | < phase >package</ phase > |
13 | < goal >copy-resources</ goal > |
16 | < encoding >${project.build.sourceEncoding}</ encoding > |
17 | < outputDirectory >${project.build.directory}</ outputDirectory > |
20 | < directory >src/main/resources/</ directory > |
22 | < include >*.properties</ include > |
23 | < include >*.xml</ include > |
25 | < filtering >true</ filtering > |
3、编译代码
05 | < groupId >org.apache.maven.plugins</ groupId > |
06 | < artifactId >maven-compiler-plugin</ artifactId > |
07 | < version >2.5</ version > |
可以指定源代码编译级别。
4、编译打包成jar文件
05 | < groupId >org.apache.maven.plugins</ groupId > |
06 | < artifactId >maven-jar-plugin</ artifactId > |
09 | < phase >package</ phase > |
14 | < classifier >without-configs</ classifier > |
16 | < exclude >*.properties</ exclude > |
17 | < exclude >*.xml</ exclude > |
可以指定打包后jar文件的文件名后缀,同时可以设置是否将配置文件也打包到jar文件中。
5、构建测试用例配置
05 | < groupId >org.apache.maven.plugins</ groupId > |
06 | < artifactId >maven-surefire-plugin</ artifactId > |
07 | < version >2.9</ version > |
10 | < testFailureIgnore >true</ testFailureIgnore > |
构建应用时,可以配置是否执行测试用例代码,也可以配置如果测试用例未通过是否忽略。
6、输出依赖jar文件到指定目录
05 | < groupId >org.eclipse.m2e</ groupId > |
06 | < artifactId >lifecycle-mapping</ artifactId > |
07 | < version >1.0.0</ version > |
09 | < lifecycleMappingMetadata > |
12 | < pluginExecutionFilter > |
13 | < groupId >org.apache.maven.plugins</ groupId > |
14 | < artifactId >maven-dependency-plugin</ artifactId > |
15 | < versionRange >[2.0,)</ versionRange > |
17 | < goal >copy-dependencies</ goal > |
20 | </ pluginExecutionFilter > |
26 | </ lifecycleMappingMetadata > |
33 | < groupId >org.apache.maven.plugins</ groupId > |
34 | < artifactId >maven-dependency-plugin</ artifactId > |
35 | < version >2.8</ version > |
38 | < id >copy-dependencies</ id > |
39 | < phase >package</ phase > |
41 | < goal >copy-dependencies</ goal > |
44 | < outputDirectory >${project.build.directory}/lib</ outputDirectory > |
45 | < overWriteReleases >false</ overWriteReleases > |
46 | < overWriteSnapshots >false</ overWriteSnapshots > |
47 | < overWriteIfNewer >true</ overWriteIfNewer > |
上面,和pluginManagement并列的plugins元素中配置的是拷贝依赖jar文件到target/lib目录下面,如果在Eclipse中出现maven-dependency-plugin (goals “copy-dependencies”, “unpack”) is not supported by m2e错误,上面pluginManagement元素中的配置,可以解决这个错误提示。
7、配置指定的repository
如果我们需要要的一些依赖jar文件在maven中央repository中没有,可以在pom文件中配置特定的repository,一般需要配置id和url。
8、将应用及其依赖jar文件打成一个jar文件
04 | < artifactId >maven-assembly-plugin</ artifactId > |
08 | < mainClass >org.shirdrn.solr.cloud.index.hadoop.SolrCloudIndexer</ mainClass > |
12 | < descriptorRef >jar-with-dependencies</ descriptorRef > |
17 | < id >make-assembly</ id > |
18 | < phase >package</ phase > |
|