1.配置pom.xml文件,添加build节点
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
|
< build > <!-- 输出的包名 --> < finalName >p2p</ finalName > < sourceDirectory >src/main/java</ sourceDirectory > < resources > <!-- 控制资源文件的拷贝(默认复制到classes目录,最后打进jar包) --> < resource > < directory >src/main/resources</ directory > < includes > < include >**/*.properties</ include > < include >**/*.xml</ include > </ includes > <!-- 排除外置的配置文件(运行时注释上使IDE能读取到配置文件;打包时放开注释让配置文件外置方便修改) --> < excludes > < exclude >config.properties</ exclude > </ excludes > </ resource > <!-- 配置文件外置的资源(存放到config目录,也是classpath路径,下面会配置) --> < resource > < directory >src/main/resources</ directory > < includes > < include >config.properties</ include > </ includes > < targetPath >${project.build.directory}/config</ targetPath > </ resource > </ resources > < plugins > <!-- 设置编译版本 --> < plugin > < groupId >org.apache.maven.plugins</ groupId > < artifactId >maven-compiler-plugin</ artifactId > < version >3.1</ version > < configuration > < source >1.7</ source > < target >1.7</ target > < encoding >UTF-8</ encoding > </ configuration > </ plugin > <!-- 打包jar文件时,配置manifest文件,加入lib包的jar依赖 --> < plugin > < groupId >org.apache.maven.plugins</ groupId > < artifactId >maven-jar-plugin</ artifactId > < configuration > < archive > <!-- 清单文件,设置入口类和classpath --> < manifest > < mainClass >com.hdwang.Application</ mainClass > < addClasspath >true</ addClasspath > < classpathPrefix >lib/</ classpathPrefix > </ manifest > <!-- 给清单文件添加键值对,增加classpath路径,这里将config目录也设置为classpath路径 --> < manifestEntries > < Class-Path >config/</ Class-Path > </ manifestEntries > </ archive > < classesDirectory > </ classesDirectory > </ configuration > </ plugin > <!-- 拷贝依赖的jar包到lib目录 --> < plugin > < groupId >org.apache.maven.plugins</ groupId > < artifactId >maven-dependency-plugin</ artifactId > < executions > < execution > < id >copy</ id > < phase >package</ phase > < goals > < goal >copy-dependencies</ goal > </ goals > < configuration > < outputDirectory > ${project.build.directory}/lib </ outputDirectory > </ configuration > </ execution > </ executions > </ plugin > <!-- 解决资源文件的编码问题 --> < plugin > < groupId >org.apache.maven.plugins</ groupId > < artifactId >maven-resources-plugin</ artifactId > < version >2.5</ version > < configuration > < encoding >UTF-8</ encoding > </ configuration > </ plugin > <!-- 自定义打zip包 --> < plugin > < groupId >org.apache.maven.plugins</ groupId > < artifactId >maven-assembly-plugin</ artifactId > < version >2.2.1</ version > < configuration > < descriptors > < descriptor >src/main/assembly/assembly.xml</ descriptor > </ descriptors > </ configuration > < executions > < execution > < id >make-assembly</ id > < phase >package</ phase > < goals > < goal >single</ goal > </ goals > </ execution > </ executions > </ plugin > </ plugins > </ build > |
这个pom配置文件中注意红色字体部分,这是实现配置文件外置的关键配置,思路就是配置文件不打进jar包,放置到外面,且将此文件夹设置为classpath,这样子程序便可以通过根据classloader很方便地读取到配置文件了。下面给出读取配置文件的java代码,在IDE运行时和打包后,代码都不用修改,因为配置文件总能从classpath路径中找到!!!
工具包的maven信息
1
2
3
4
5
|
< dependency > < groupId >commons-configuration</ groupId > < artifactId >commons-configuration</ artifactId > < version >1.10</ version > </ dependency > |
2.新建maven-assembly-plugin插件的配置文件assembly.xml,内容如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
< assembly > < id >bin</ id > < formats > < format >zip</ format > </ formats > <!-- 使用assembly拷贝依赖包 --> <!--<dependencySets>--> <!--<dependencySet>--> <!--<!– 是否包含自己(将项目生成的jar包也输出到lib目录) –>--> <!--<useProjectArtifact>false</useProjectArtifact>--> <!--<outputDirectory>lib</outputDirectory>--> <!--</dependencySet>--> <!--</dependencySets>--> < fileSets > <!-- 从目标目录拷贝文件去压缩 --> < fileSet > < directory >target</ directory > < includes > < include >*.jar</ include > </ includes > < outputDirectory >/</ outputDirectory > </ fileSet > < fileSet > < directory >target/lib</ directory > < outputDirectory >/lib</ outputDirectory > </ fileSet > < fileSet > < directory >target/config</ directory > < outputDirectory >/config</ outputDirectory > </ fileSet > <!-- 从源目录拷贝文件去压缩 --> < fileSet > < directory >src/main/run</ directory > < includes > < include >*.sh</ include > < include >*.cmd</ include > </ includes > < outputDirectory >/</ outputDirectory > </ fileSet > < fileSet > < directory >src/main</ directory > < includes > < include >ReadMe.txt</ include > </ includes > < outputDirectory >/</ outputDirectory > </ fileSet > </ fileSets > </ assembly > |
这个插件在package生命周期中运行,执行mvn package或者mvn install便可触发此插件的执行。这里我注释掉了拷贝依赖包的代码,是因为在pom.xml文件中已经配置了maven-dependency-plugin执行这样的操作,无须重复配置。fileSet可以配置需要拷贝压缩的文件,directory路径相对于项目根目录,outputDirectory路径相对于输出目录target,includes可以对拷贝的文件进行筛选。这里可以拷贝压缩输出目录的文件,应该就是因为此插件运行在程序编译打包之后,这样子就达到了我们自定义打包的要求:编译->拷贝资源文件->项目打包->拷贝依赖的jar包-> assembly进行拷贝压缩。然后使用打出的zip包就可以去部署发布了,解压后就能运行。
3.程序打包流程示意图
以上这篇java application maven项目打自定义zip包实例(推荐)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持服务器之家。