返回

Maven构建可执行JAR的指南:分发和运行一体

java

Maven 构建可执行/可运行 JAR 的指南

引言

可执行 JAR 是将应用程序打包成单个文件的绝佳方式,便于分发和运行。Maven 是一个强大的构建工具,可以让你轻松管理依赖项并构建可执行 JAR。本文将逐步指导你完成使用 Maven 创建可执行/可运行 JAR 的过程。

构建可执行 JAR

  1. 配置 POM 文件

在项目 pom.xml 文件中,添加 Maven Assembly 插件配置:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-assembly-plugin</artifactId>
  <configuration>
    <archive>
      <manifest>
        <mainClass>你的主类名</mainClass>
      </manifest>
    </archive>
    <descriptorRefs>
      <descriptorRef>jar-with-dependencies</descriptorRef>
    </descriptorRefs>
  </configuration>
  <executions>
    <execution>
      <id>make-assembly</id>
      <phase>package</phase>
      <goals>
        <goal>single</goal>
      </goals>
    </execution>
  </executions>
</plugin>
  1. 指定主类

<mainClass> 元素中,替换为你项目的入口点(主类)的完全限定名称。

  1. 运行 Maven 命令

使用以下命令在命令行中构建可执行 JAR:

mvn package

合并依赖项

默认情况下,Maven 不会将依赖项 JAR 包含在输出 JAR 中。要合并依赖项,你需要使用 Maven Shade 插件:

  1. 添加 Shade 插件

在 pom.xml 文件中,添加以下插件配置:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-shade-plugin</artifactId>
  <executions>
    <execution>
      <id>shade-dependencies</id>
      <phase>package</phase>
      <goals>
        <goal>shade</goal>
      </goals>
      <configuration>
        <transformers>
          <transformer
            implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer" />
        </transformers>
      </configuration>
    </execution>
  </executions>
</plugin>
  1. 配置 JAR-with-Dependencies 符

在 pom.xml 文件的 <assembly> 部分,添加以下配置:

<descriptorRefs>
  <descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
  1. 运行 Maven 命令

再次运行 mvn package 命令。

现在,可执行 JAR 将包含所有必需的依赖项。

结论

使用 Maven 和 Maven Shade 插件,你可以在 JAR 中轻松地创建包含所有必需依赖项的可执行/可运行 JAR。这简化了项目的打包和分发。

常见问题解答

  • 如何设置 JAR 的版本号?

在 pom.xml 文件中使用 <version> 元素设置 JAR 的版本号。

  • 如何调试可执行 JAR?

可以使用 java -jar 命令调试可执行 JAR,例如:

java -jar my-project.jar --debug
  • 如何将资源文件包含在可执行 JAR 中?

在 pom.xml 文件中使用 <resources> 元素将资源文件包含在可执行 JAR 中。

  • 如何自定义可执行 JAR 的名称?

在 pom.xml 文件中使用 <finalName> 元素自定义可执行 JAR 的名称。

  • 如何排除特定的依赖项?

在 pom.xml 文件的 <dependencyManagement> 部分使用 <exclusion> 元素排除特定的依赖项。