如何使用maven把项目及其依赖打包为可运行jar包

Posted wst021sh

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用maven把项目及其依赖打包为可运行jar包相关的知识,希望对你有一定的参考价值。


转载原文 : ​​https://www.coder.work/article/3793642​


问题

我想把java项目打包为可运行的分布式jar包。我该怎样做,才能把项目中maven所依赖的jar包导入到我的项目jar包中?

回答

在​​pom.xml​​文件中,加入如下的插件:

<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<archive>
<manifest>
<!-- 这里是你的项目main函数所在的类的全限定名 -->
<mainClass>fully.qualified.MainClass</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
</plugins>
</build>

之后,运行maven命令:

mvn clean compile assembly:single

​clean​​​,​​compile​​​,​​assembly:single​​​任务将会依次被执行;​​compile​​​任务必须写在​​assembly:single​​之前,否则打包后的jar包内将不会有你的编译代码。

(译注:执行完后,会在你的maven项目的target目录下,生成想要的jar包,而不再需要使用​​mvn package​​命令进行打包)

通常情况下,上述maven命令执行后会自动绑定到项目的构建阶段,从而保证了以后在执行​​mvn install​​​命令时的jar包也会被构建。 (译注:下面是实际上完整的默认的​​pom.xml​​​配置,只不过​​<executions>​​可以被省略,若省略则按照下述默认的配置执行)

<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>fully.qualified.MainClass</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-assembly</id> <!-- 用于maven继承项目的聚合 -->
<phase>package</phase> <!-- 绑定到package阶段 -->
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>

拓展

怎样去运行打包后的可运行jar包?

  • 对上述配置中已经指定了​​main​​函数所在类的jar包,打开命令行窗口,输入命令:
java -jar jar包的路径/jar包的名字.jar

例如:

java -jar D:\\my_java_project\\maven_test.jar
  • 若在pom.xml并没有指定​​main​​方法所在类,那么该jar的运行应采取如下命令:
java -cp jar包的路径/jar包的名字.jar main方法所在类的全限定名

例如:

java -cp D:\\my_java_project\\maven_test.jar com.my.path.MainClass


以上是关于如何使用maven把项目及其依赖打包为可运行jar包的主要内容,如果未能解决你的问题,请参考以下文章

Maven项目打Jar包,如何添加依赖

请问,maven项目发布为jar到私服,其他项目如何引用内部依赖?

用maven打包jar项目其中很多模块引用了相同jar包,如何把它些jar公用,让maven打包不把这公用包打进去

maven项目打包以及依赖的问题:现有项目A,B两个,A项目依赖了很多第三方jar,现在B项目需要依赖A项目--

spring maven项目打包为可执行jar包

如何把maven引用的jar包放入lib下面呐