maven-assembly-plugin把java工程打包成为一个可执行的jar包

maven-assembly-plugin把java工程打包成为一个可执行的jar包

用java写了一个小工具,使用maven java 工程。写完后,想打包成一个可执行的jar包,使用如下方法

1、使用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>


执行命令

mvn clean compile assembly:single

在target文件夹里生成MavenTestApp-1.0-SNAPSHOT-jar-with-dependencies.jar,这个jar包便是可执行的jar了,用命令java -jar pathjarfile便可以执行。

注意:compile必须再assembly:single之前,要不然你工程的代码(class文件)就不会被打包进去。assembly:single是maven的goal。

2、通常情况下,这个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>

如此,就直接运行以下命令即可。

mvn clean package

3、另外有几点要注意:


1. 必须要有

<archive>     <manifest>          <mainClass>org.kuan.wang.App</mainClass>     </manifest></archive>

否则会报错 :no main manifest attribute, in targetMavenTestApp-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> 会生成两个jar包。跟使用了mvn package一样,无需再像命令assembly:single一样前面必须加compile.

免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部