使用 Maven 创建具有依赖关系的可执行 JAR

Maven

将 Maven 项目打包到单个可执行 JAR 中

在处理 Java 项目时,通常需要将应用程序打包到单个可执行 JAR 文件中以便于分发。 Maven 是一个强大的构建自动化工具,允许开发人员在这个单一输出 JAR 中包含所有必要的依赖项。

本文将指导您完成配置 Maven 项目所需的步骤,以将所有依赖项 JAR 包含到最终的可执行 JAR 中。通过遵循这些说明,您将简化部署过程并确保您的应用程序在不同环境中顺利运行。

命令 描述
<plugin> 定义在构建过程中使用的 Maven 插件。插件可以执行特定的任务,例如编译代码或打包项目。
<groupId> 指定Maven项目的组标识符,通常是反向域名。
<artifactId> 定义工件的标识符,即项目的名称。
<version> 指示项目的当前版本。
<build> 包含项目的构建配置,包括插件和资源。
<descriptorRef> 引用 Maven 程序集插件要使用的预定义描述符,例如“jar-with-dependencies”。
<mainClass> 指定JAR文件运行时要执行的主类。
<execution> 定义插件内的执行块,指定要在不同构建阶段执行的任务。
mvn clean package 命令清理项目并将其打包到 JAR 文件中,包括所有依赖项。
java -jar target/...jar 用于运行生成的 JAR 文件的命令,指定 JAR 的路径。

使用 Maven 创建并运行可执行 JAR

上面提供的脚本演示了如何配置 Maven 项目以将其所有依赖项打包到单个可执行 JAR 文件中。第一个脚本是 Maven 文件,其中包含项目的配置。在此文件中, 标签用于定义 Maven Assembly Plugin。该插件对于创建包含所有依赖项的可执行 JAR 至关重要。这 插件配置中的标签指定了 jar-with-dependencies 描述符,确保项目的所有依赖项都打包到最终的 JAR 文件中。这 标签里面的 部分至关重要,因为它告诉 Maven 执行 JAR 时哪个类包含要运行的 main 方法。

这 插件配置内的块是操作发生的地方。它指定插件的目标 应在期间执行 构建生命周期的阶段。这就是触发创建具有依赖项的 JAR 文件的原因。第二个脚本是一个简单的命令行指令: mvn clean package。此命令清理项目(删除以前的构建工件)、编译源代码、运行测试并将项目打包到 JAR 文件中。最终的 JAR 文件将位于 项目目录并根据 和 中指定的 pom.xml

使用 Maven 创建具有依赖关系的可执行 JAR 文件

Maven 配置脚本

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.example</groupId>
    <artifactId>my-app</artifactId>
    <version>1.0-SNAPSHOT</version>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>3.3.0</version>
                <configuration>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                    <archive>
                        <manifest>
                            <mainClass>com.example.MainClass</mainClass>
                        </manifest>
                    </archive>
                </configuration>
                <executions>
                    <execution>
                        <id>make-assembly</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

运行Maven命令打包JAR

命令行说明

mvn clean package
# This command will compile the code, run the tests, and create the JAR file
# The JAR file will include all dependencies specified in the pom.xml
# It will be located in the target directory of the project
# The final JAR file will be named my-app-1.0-SNAPSHOT-jar-with-dependencies.jar

# To run the JAR file, use the following command:
java -jar target/my-app-1.0-SNAPSHOT-jar-with-dependencies.jar
# Ensure that the mainClass specified in the pom.xml is correct
# This will start your application with all dependencies included

打包依赖项的高级 Maven 技术

除了使用 Maven 创建可执行 JAR 的基本配置之外,还有其他技术可以增强您的构建过程。其中一项技术涉及使用 插件而不是 插入。 Maven Shade 插件提供了用于创建 uber-JAR(包含依赖项的 JAR)的更高级功能。它允许您重命名包以避免类路径冲突,并为重复的类和资源提供更好的处理。此外,它还提供对最终 JAR 中包含哪些依赖项的细粒度控制。

另一个重要方面是管理 JAR 文件的大小。大型 JAR 文件可能很麻烦,传输或加载速度也很慢。这 可以帮助您排除不必要的文件和类,从而减少最终 JAR 的大小。您还可以配置插件,通过删除非必要信息(例如未使用的类或冗余资源)来最小化 JAR。在处理具有大量依赖项的大型项目时,这些高级配置特别有用。

  1. 如何指定 JAR 中的主类?
  2. 您可以使用指定主类 内的标签 Maven 插件配置部分。
  3. 如何从最终 JAR 中排除特定依赖项?
  4. 使用 插件配置中的标签来指定不应包含在最终 JAR 中的依赖项。
  5. 什么是 uber-JAR?
  6. uber-JAR 是一个 JAR 文件,它不仅包含已编译的代码,还包含其所有依赖项。
  7. 如何避免 JAR 中的类路径冲突?
  8. 这 允许您重命名依赖项中的包以避免冲突。
  9. 如何处理依赖项中的重复类?
  10. 配置 通过指定如何在最终 JAR 中处理重复的类和资源来管理重复的类和资源。
  11. 我可以仅包含依赖项中的特定文件吗?
  12. 是的,您可以配置 或者 仅包含依赖项中的特定文件。
  13. 如何运行打包好的JAR?
  14. 使用 命令后跟 JAR 文件的路径。
  15. 如何验证 JAR 文件的内容?
  16. 您可以使用 命令列出 JAR 文件的内容。
  17. 如果我的 JAR 文件太大怎么办?
  18. 使用 排除不必要的文件并最小化 JAR 大小。

关于 Maven 可执行 JAR 的总结性想法

使用 Maven 创建具有依赖项的可执行 JAR 可以简化 Java 应用程序的部署过程。通过正确配置 文件并利用 Maven Assembly Plugin 或 Maven Shade Plugin 等插件,开发人员可以将所有必要的依赖项打包到单个 JAR 文件中。这种方法确保应用程序可以在各种环境中无缝运行,使分发和执行变得简单。遵循这些步骤将帮助您有效管理项目的依赖项并创建可靠的可执行 JAR 文件。