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