在 Java 开发中,如果想把项目打成可直接执行的一个 jar 包,需要通过 maven 相关插件把依赖的 jar 包一起放进指定的一个 jar 包里;比较典型的使用场景是,如果有离线任务要通过 spark 提交相关 jar 包执行,那这时候需要这样操作,它有几种方式的操作。
maven-assembly-plugin(推荐方式)
maven-assembly-plugin 一个插件搞定,Maven 项目的 pom.xml 引入该插件,具体如下:
<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>com.xxx.xxx.MainClass</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
</plugins>
</build>
然后执行如下打包命令:
mvn clean compile assembly:single
打包后会在 target 目录下生成一个 xxx-jar-with-dependencies.jar 文件,这个文件不但包含了自己项目中的代码和资源,还包含了所有依赖包的内容。所以可以直接通过 java -jar
来运行。
通常情况下,通过 mvn package
或 install
打 jar 包时,希望也把依赖包打进去,这是需要额外加一些配置,具体如下:
<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>com.xxx.xxx.MainClass</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<!-- 在执行 package 打包时,执行 assembly:single 进行 jar 包合并操作 -->
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>