把java工程打包成为一个可执行的jar包

时间:2020-11-27 09:55:30

from:http://blog.csdn.net/qiyueqinglian/article/details/46229157

Java写了一个小工具,使用maven java 工程。写完后,想打包成一个可执行的jar包。 
使用maven的插件maven-assembly-plugin

pom.xml里添加

<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>org.kuan.wang.App</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
</plugins>
</build>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

执行命令:

mvn clean compile assembly:single
 
 
  • 1
  • 1

在target文件夹里生成MavenTestApp-1.0-SNAPSHOT-jar-with-dependencies.jar 
这个jar包便是可执行的jar了,用命令java -jar path\jarfile便可以执行。 
注意:compile必须再assembly:single之前,要不然你工程的代码(class文件)就不会被打包进去

assembly:single是maven的goal. 
通常情况下,这个goal要绑定到maven build 的phase里,这样它就可以自动执行。mvn package是用来打包jar包的。只是jar包不可执行。 
在以上的pom文件里加<executions>

<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>org.kuan.wang.App</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-assembly</id> <!-- this is used for inheritance merges -->
<phase>package</phase> <!-- bind to the packaging phase -->
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

这样的话直接运行以下命令就行了。

mvn clean package
 
 
  • 1
  • 1

另外有几点要注意。 
1. 必须要有

<archive>
<manifest>
<mainClass>org.kuan.wang.App</mainClass>
</manifest>
</archive>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5

否则会报错 
no main manifest attribute, in target\MavenTestApp-1.0-SNAPSHOT-jar-with-dependencies.jar 
<mainClass>是你自己工程的入口。 
2. 使用mvn clean compile assembly:single,只生成一个jar包,名字里有jar-with-dependencies,可执行。 
使用mvn package生成两个jar包,名字里有jar-with-dependencies的jar是可执行的。 
3. 如果使用<goal>assembly</goal> 
用命令mvn assembly:assembly会生成两个jar包。跟使用了mvn package一样 
无需再像命令assembly:single一样前面必须加compile.