maven 打包可执行jar的方法

阅读更多

在这之前,我自己找了点maven的东西添加进来

?
1
2
3
4
5
6
7
Maven内置变量说明:
     ${basedir} 项目根目录
     ${project.build.directory} 构建目录,缺省为target
     ${project.build.outputDirectory} 构建过程输出目录,缺省为target/classes
     ${project.build.finalName} 产出物名称,缺省为${project.artifactId}-${project.version}
     ${project.packaging} 打包类型,缺省为jar
     ${project.xxx} 当前pom文件的任意节点的内容

 

 

 

方式1

修改pom.xml增加如下内容

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
< plugin >
     < groupId >org.apache.maven.plugins groupId >
     < artifactId >maven-jar-plugin artifactId >
     < version >2.4 version >
     < configuration >
         < archive >
             < manifest >
                 < addClasspath >true addClasspath >
                 < classpathPrefix >lib/ classpathPrefix >
                 < mainClass >com.sysware.HelloWorld mainClass >
             manifest >
         archive >
     configuration >
plugin >

运行mvn clean package即可

批注:

经过我本人自测之后发现,这种方式虽然可以打包,但是不会将依赖包也添加进去。所以我认为这种方式的打包适合写一个工具,然后打成JAR包,导入其他工程使用,如果是一个单独运行的JAR包,则不适用。

方式2

在pom.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
< plugin >
     < groupId >org.apache.maven.plugins groupId >
     < artifactId >maven-assembly-plugin artifactId >
     < version >2.3 version >
     < configuration >
         < appendAssemblyId >false appendAssemblyId >
         < descriptorRefs >
             < descriptorRef >jar-with-dependencies descriptorRef >
         descriptorRefs >
         < archive >
             < manifest >
                 < mainClass >com.juvenxu.mvnbook.helloworld.HelloWorld mainClass >
             manifest >
         archive >
     configuration >
     < executions >
         < execution >
             < id >make-assembly id >
             < phase >package phase >
             < goals >
                 < goal >assembly goal >
             goals >
         execution >
     executions >
plugin >

运行mvn assembly:assembly (我自己使用mvn clean package也是可以的

批注:

这个方式和方式1不同,这种打包方式,将项目及所依赖的所有jar包打包成一个jar,让打出来的JAR包成为一个可独立运行的JAR包

方式3

批注:

    我自己在博主的基础上,添加了一些配置和注释

    方式3和方式4都是比较复杂的打包方式,但是可以自己定义细节,比如需要哪些文件被打包,哪些文件不打包进去,哪些文件放到哪里等等。

?
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
< build >
     < finalName >test-${project.version} finalName >
     < sourceDirectory >src/main/java sourceDirectory >
     < resources >
        
         < resource >
             < directory >src/main/resources directory >
             < targetPath >${project.build.directory} targetPath >
            
            
             < excludes >
                 < exclude >*.txt exclude >
             excludes >
            
             < includes >
                 < include >*.properties include >
             includes >
         resource >
     resources >
     < plugins >
        
         < plugin >
             < groupId >org.apache.maven.plugins groupId >
             < artifactId >maven-compiler-plugin artifactId >
             < configuration >
                 < defaultLibBundleDir >lib defaultLibBundleDir >
                 < source >1.7 source >
                 < target >1.7 target >
                 < encoding >UTF-8 encoding >
             configuration >
         plugin >
        
         < plugin >
             < groupId >org.apache.maven.plugins groupId >
             < artifactId >maven-jar-plugin artifactId >
             < configuration >
                 < archive >
                     < manifest >
                         < addClasspath >true addClasspath >
                         < classpathPrefix >lib/ classpathPrefix >
                         < mainClass >com.eya.main.Hello mainClass >
                     manifest >
                 archive >
             configuration >
         plugin >
        
         < 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.4 version >
             < configuration >
                 < encoding >UTF-8 encoding >
             configuration >
         plugin >
        
         < plugin >
             < artifactId >maven-source-plugin artifactId >
             < version >2.1 version >
             < configuration >
                 < attach >true attach >
                 < encoding >UTF-8 encoding >
             configuration >
             < executions >
                 < execution >
                     < phase >compile phase >
                     < goals >
                         < goal >jar goal >
                     goals >
                 execution >
             executions >
         plugin >
     plugins >
build >

方式4

?
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
< build >
     < resources >
         < resource >
             < targetPath >${project.build.directory}/classes targetPath >
             < directory >src/main/resources directory >
             < filtering >true filtering >
             < includes >
                 < include >**/*.xml include >
             includes >
         resource >
     resources >
     < plugins >
         < plugin >
             < groupId >org.apache.maven.plugins groupId >
             < artifactId >maven-compiler-plugin artifactId >
             < version >3.0 version >
             < configuration >
                 < source >1.6 source >
                 < target >1.6 target >
                 < encoding >UTF-8 encoding >
             configuration >
         plugin >
         < plugin >
             < groupId >org.apache.maven.plugins groupId >
             < artifactId >maven-shade-plugin artifactId >
             < version >2.0 version >
             < executions >
                 < execution >
                     < phase >package phase >
                     < goals >
                         < goal >shade goal >
                     goals >
                     < configuration >
                         < transformers >
                             < transformer
                                 implementation = "org.apache.maven.plugins.shade.resource.ManifestResourceTransformer" >
                                 < mainClass >com.test.testguava.app.App mainClass >
                             transformer >
                             < transformer
                                 implementation = "org.apache.maven.plugins.shade.resource.AppendingTransformer" >
                                 < resource >applicationContext.xml resource >
                             transformer >
                         transformers >
                         < shadedArtifactAttached >true shadedArtifactAttached >
                         < shadedClassifierName >executable shadedClassifierName >
                     configuration >
                 execution >
             executions >
         plugin >
     plugins >
build >

你可能感兴趣的:(maven 打包可执行jar的方法)