Maven 教程

Maven 笔记

original icon
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.knowledgedict.com/tutorial/maven-an-executable-jar-with-dependencies.html

Maven 生成(打包)带有依赖的可以直接执行的一个 jar 包

Maven 问题汇总 Maven 问题汇总


在 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 packageinstall 打 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>