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日

相关文章

  • 实例详解Android 获取短信会话列表

    实例详解Android 获取短信会话列表 为什么需要获取短信会话列表 在我们的日常生活中需要经常使用手机发送和接收短信,而对于一些需要短信的应用程序来说,获取短信会话列表是很有必要的,比如备份短信、导出短信等等。因此,本文将介绍获取Android短信会话列表的方法。 实现步骤 1. 添加权限 首先,在AndroidManifest.xml文件中添加权限: &…

    Java 2023年5月23日
    00
  • Struts2 Result 参数详解

    Struts2 Result 参数详解 在 Struts2 中,结果(Result)是一个非常重要的概念。在 Action 执行完成后,它将根据 Result 配置找到一个 JSP 文件并将其渲染。在本文中,我们将详细探讨 Struts2 Result 中的参数。 结果类型 Struts2 支持多种不同类型的结果,这些结果类型在 struts.xml 文件中…

    Java 2023年5月20日
    00
  • Java中Date与String相互转换的方法

    让我来详细讲解一下“Java中Date与String相互转换的方法”的攻略。 为什么需要进行Date与String的转换 在 Java 中,Date 类表示日期和时间。而在进行实际编程的过程中,我们常常需要将日期时间转换为字符串,或者将字符串转换为日期时间。因此,掌握 Date 和 String 相互转换的方法是非常重要的。 Date 转换为 String …

    Java 2023年5月27日
    00
  • SpringBoot中如何进行统一异常处理

    统一异常处理是一个非常常见的功能,在SpringBoot中也有非常多的方式来实现。下面是一个完整的攻略: 1. 统一异常处理的基本概念 在一个系统中,由于各种原因,可能会出现各种异常,如空指针异常、文件读写异常等。系统中处理这些异常的方式有很多种,包括: 在方法中使用 try-catch 块进行捕获和处理; 抛出异常,并在上层方法中进行捕获和处理; 在 we…

    Java 2023年5月27日
    00
  • Java如何调用Matlab程序

    下面是关于Java如何调用Matlab程序的完整攻略和示例说明: 一、Matlab引擎API Matlab引擎API是Matlab提供的一种机制,使得Java程序能够通过API与Matlab交互。下面是Java调用Matlab程序的基本步骤: 首先需要安装Matlab引擎API,它可以在Matlab中的“Add-Ons”里找到,需要选择需要使用版本对应的AP…

    Java 2023年5月26日
    00
  • 两种用空格分隔的java字符串的方式

    确实,Java中有两种使用空格分隔字符串的方法: 使用split方法: split方法允许您将字符串分裂成子字符串数组,方法如下: String[] strArray = "Hello World".split(" "); 这将创建一个字符串数组,其中包含两个元素: “Hello” 和 “World”。您可以使用for…

    Java 2023年5月27日
    00
  • Java 实战项目锤炼之在线美食网站系统的实现流程

    Java 实战项目锤炼之在线美食网站系统的实现流程 1. 确定需求 在项目启动前,首先要仔细理解用户的需求。针对在线美食网站系统,我们需要明确以下问题: 网站需要提供哪些功能,例如用户注册、登录、浏览餐厅、下单、支付等 网站需要支持哪些业务特性,例如搜索、推荐、评价等 网站需要支撑多少用户量,需要考虑如何做好服务器部署和负载均衡 网站的安全性需要考虑哪些问题…

    Java 2023年5月19日
    00
  • Java实现SHA-256加密算法的完全解析

    Java实现SHA-256加密算法的完全解析 SHA-256加密算法是目前应用最广泛的加密算法之一,本篇文章介绍如何在Java中实现SHA-256加密算法。 什么是SHA-256加密算法 SHA-256是一种哈希算法,将任意长度的二进制值映射为一个较短的固定长度的二进制值(通常是256位)。SHA-256算法基于SHA-2家族的算法,其中”256″表示哈希值…

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