Maven 项目用Assembly打包可执行jar包的方法

下面是详细的“Maven 项目用 Assembly 打包可执行 jar 包的方法”的攻略:

一、前提条件

  1. 已安装 Maven 并配置环境变量
  2. 已经有一个 Maven 项目

二、添加 Assembly 插件到 Maven 项目中

在项目的 pom.xml 文件中添加以下插件配置:

<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-assembly-plugin</artifactId>
      <version>3.3.0</version>
      <configuration>
        <archive>
          <manifest>
            <mainClass>your.main.Class</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>
  </plugins>
</build>

其中 <mainClass>your.main.Class</mainClass> 指定了可执行 jar 包的入口类。

三、在 Maven 项目中创建 assembly 描述文件

创建一个名为 assembly.xml 的文件,放置在 Maven 项目的根目录中。以下是一个示例:

<assembly>
  <id>jar-with-dependencies</id>
  <formats>
      <format>jar</format>
  </formats>
  <includeBaseDirectory>false</includeBaseDirectory>
  <dependencySets>
      <dependencySet>
          <outputDirectory>lib</outputDirectory>
          <scope>runtime</scope>
          <unpack>false</unpack>
      </dependencySet>
  </dependencySets>
</assembly>

上述配置中,outputDirectory 指定了依赖库的输出目录,scope 为 runtime 表示只打包运行时依赖。

四、执行 Maven 命令

在 Maven 项目的根目录执行以下命令即可生成可执行 jar 包:

mvn clean package assembly:single

执行完命令之后,在项目的 target 目录下会生成一个包含所有依赖项的可执行 jar 包。

五、示例说明

以下是两个示例说明:

示例一

假设我们有一个 Maven 项目,其中有一个入口类 com.example.Main,这个项目依赖了 junit 和 log4j,下面分别介绍 pom.xml 和 assembly.xml 的配置:

pom.xml 配置:

<project>
  <!-- ... -->
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
      <version>1.2.17</version>
    </dependency>
  </dependencies>
  <!-- ... -->
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-assembly-plugin</artifactId>
        <version>3.3.0</version>
        <configuration>
          <archive>
            <manifest>
              <mainClass>com.example.Main</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>
    </plugins>
  </build>
</project>

assembly.xml 配置:

<assembly>
  <id>jar-with-dependencies</id>
  <formats>
      <format>jar</format>
  </formats>
  <includeBaseDirectory>false</includeBaseDirectory>
  <dependencySets>
      <dependencySet>
          <outputDirectory>lib</outputDirectory>
          <scope>runtime</scope>
          <unpack>false</unpack>
      </dependencySet>
  </dependencySets>
</assembly>

使用以下命令执行 Maven 构建:

mvn clean package assembly:single

执行完命令之后,在项目的 target 目录下会生成一个包含所有依赖项的可执行 jar 包 project-1.0-SNAPSHOT-jar-with-dependencies.jar

示例二

假设我们有一个 Maven 项目,其中有一个入口类 com.example.Main,这个项目依赖了 commons-lang3 和 gson,下面分别介绍 pom.xml 和 assembly.xml 的配置:

pom.xml 配置:

<project>
  <!-- ... -->
  <dependencies>
    <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>commons-lang3</artifactId>
      <version>3.9</version>
    </dependency>
    <dependency>
      <groupId>com.google.code.gson</groupId>
      <artifactId>gson</artifactId>
      <version>2.8.6</version>
    </dependency>
  </dependencies>
  <!-- ... -->
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-assembly-plugin</artifactId>
        <version>3.3.0</version>
        <configuration>
          <archive>
            <manifest>
              <mainClass>com.example.Main</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>
    </plugins>
  </build>
</project>

assembly.xml 配置:

<assembly>
  <id>jar-with-dependencies</id>
  <formats>
      <format>jar</format>
  </formats>
  <includeBaseDirectory>false</includeBaseDirectory>
  <dependencySets>
      <dependencySet>
          <outputDirectory>lib</outputDirectory>
          <useProjectArtifact>false</useProjectArtifact>
          <unpack>true</unpack>
          <scope>runtime</scope>
      </dependencySet>
  </dependencySets>
</assembly>

使用以下命令执行 Maven 构建:

mvn clean package assembly:single

执行完命令之后,在项目的 target 目录下会生成一个包含所有依赖项的可执行 jar 包 project-1.0-SNAPSHOT-jar-with-dependencies.jar

注意:在 assembly.xml 中使用了 <useProjectArtifact>false</useProjectArtifact><unpack>true</unpack> 配置,表示依赖不直接从 Maven 仓库中下载,而是拷贝到 jar 包中并解压缩。这个配置的好处是,可以避免版本冲突问题。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Maven 项目用Assembly打包可执行jar包的方法 - Python技术站

(0)
上一篇 2023年6月2日
下一篇 2023年6月2日

相关文章

  • 详解Spring Boot中Controller用法

    在Spring Boot中,Controller是一个非常重要的组件,它可以帮助开发者处理HTTP请求并返回HTTP响应。在本攻略中,我们将详细介绍如何使用Controller,并提供两个示例来说明其用法。 以下是两个示例,介绍如何使用Controller: 示例一:使用@GetMapping注解 @GetMapping注解是Spring Boot中一个非常…

    Java 2023年5月15日
    00
  • 学习使用Android Chronometer计时器

    学习使用 Android Chronometer 计时器的完整攻略如下: 1. 什么是 Android Chronometer 计时器? Android Chronometer 计时器是 Android 中的一个可视化组件,它可以通过界面上直观的数字和符号帮助用户简单直观地了解时间的流逝。Chronometer 计时器可以用于记录运动时间、考试时间等需要计时…

    Java 2023年5月26日
    00
  • Java如何实现http接口参数和返回值加密

    要实现HTTP接口参数和返回值加密,可以采用对称加密和非对称加密的方式。 对称加密 对称加密算法是加密和解密密钥相同的加密算法,常见的有DES、3DES、AES等。对称加密的加解密速度快,但密钥传输、保密性等存在问题。 在Java中使用AES对称加密方式来对参数和返回值进行加密。使用如下代码: import javax.crypto.Cipher; impo…

    Java 2023年5月20日
    00
  • 初识Spring Boot框架和快速入门

    下面我就来详细讲解“初识SpringBoot框架和快速入门”的完整攻略。 一、什么是Spring Boot? Spring Boot是一个开源的框架,它是基于Spring 框架的基础上创建的一个快速开发的框架。它封装了大量的Spring框架相关的组件和工具,简化了Spring应用的初始化和开发过程,大大提高了开发效率和开发体验。 二、Spring Boot的…

    Java 2023年5月15日
    00
  • 详解在Spring MVC中使用注解的方式校验RequestParams

    在Spring MVC中使用注解的方式校验RequestParams 在Spring MVC中,我们可以使用注解的方式来校验请求参数,这样可以避免在控制器中编写大量的校验代码。本文将详细介绍在Spring MVC中使用注解的方式校验RequestParams,并提供两个示例说明。 校验注解 在Spring MVC中,我们可以使用以下注解来校验请求参数: @N…

    Java 2023年5月17日
    00
  • java application maven项目打自定义zip包实例(推荐)

    下面是“Java Application Maven项目打自定义zip包实例”的详细攻略。 简述 在程序的开发过程中,通常需要将代码及其附属资源打包为可执行的程序或库,并进行发布和分发。Maven是一个非常流行的Java包管理工具,可以通过Maven来打包生成自定义的zip包。 步骤 创建Maven项目 首先需要创建一个简单的Maven项目。使用Maven …

    Java 2023年5月20日
    00
  • Javascript 面向对象特性

    JavaScript面向对象特性 JavaScript是一门支持面向对象编程思想的语言,它提供了很多面向对象特性,如类、对象、继承、封装、多态等。接下来我们将详细讲解JavaScript面向对象特性的完整攻略。 类 在JavaScript中,我们可以使用构造函数来定义一个类,构造函数中包含了初始化对象的属性和方法。例如,下面是一个Person类的定义: fu…

    Java 2023年5月26日
    00
  • 使用jQuery.form.js/springmvc框架实现文件上传功能

    下面是关于“使用jQuery.form.js/SpringMVC框架实现文件上传功能”的完整攻略,包含两个示例说明。 使用jQuery.form.js/SpringMVC框架实现文件上传功能 在本文中,我们将介绍如何使用jQuery.form.js和SpringMVC框架实现文件上传功能。 步骤1:添加依赖 首先,我们需要在pom.xml中添加SpringM…

    Java 2023年5月17日
    00
合作推广
合作推广
分享本页
返回顶部