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日

相关文章

  • springboot使用校验框架validation校验的示例

    下面我将为您详细讲解 “springboot使用校验框架validation校验的示例”。 1. 简介 Spring Boot是一个非常受欢迎的Java开发框架,同样,校验数据是每个Web应用的基本要求之一。在Spring Boot中,可以使用Validation框架轻松地完成数据校验。 Validation是Java Bean Validation API…

    Java 2023年5月19日
    00
  • Java算法之堆排序代码示例

    下面是Java算法之堆排序代码示例的完整攻略: 堆排序算法概述 堆排序是一种利用堆的数据结构所设计的一种基于选择的排序算法。堆排序的时间复杂度为O(nlogn),空间复杂度为O(1)。 基本思想是: 将待排序序列构造成一个堆(大根堆或小根堆); 将根节点与最后一个节点交换,将交换后的最后一个节点从堆中排除; 对剩余元素重新建堆,重复步骤2,直至剩余元素个数为…

    Java 2023年5月19日
    00
  • JSP页面中文参数的传递(get和post方法分析)

    关于JSP页面中文参数的传递,我们需要了解以下几点: JSP页面中传递参数的方式一般有两种:get方法和post方法。 为了避免中文乱码问题,我们在处理传递的参数时需要对字符编码进行设置。 对于get方法传递的参数,可以使用URLEncoder对中文进行编码,而在JSP页面接收时可以使用URLDecoder进行解码,即可得到原始中文字符串。 对于post方法…

    Java 2023年6月15日
    00
  • Spring 与 JDK 线程池的简单使用示例详解

    下面是Spring与JDK线程池的简单使用示例详解的攻略。 Spring与JDK线程池的简单使用示例详解 什么是线程池 线程池是一种多线程的解决方案,它的核心思想是在应用程序启动的时候,提前创建若干个线程并放入线程池中,并维护这些线程的生命周期,应用程序需要处理任务的时候,不需要再临时创建新的线程,而是从线程池中获取可用的线程。 JDK线程池的使用 Java…

    Java 2023年5月18日
    00
  • SpringBoot如何整合Springsecurity实现数据库登录及权限控制

    这是一个相对比较复杂的话题,需要比较详细的讲解,由于篇幅所限,我将对该过程进行简化和概括,方便您快速了解需要的知识点。 首先,Spring Boot是Spring框架的一种简化版本,可以快速构建基于Spring的项目。而Spring Security则是Spring框架中的一个安全模块,可以实现用户认证、授权等功能。下面我们来讲一下如何整合Spring Se…

    Java 2023年5月20日
    00
  • Java Spring Boot 集成Zookeeper

    Java Spring Boot 集成 Zookeeper Zookeeper是一个分布式协调服务,它可以用于管理和协调分布式应用程序。在本文中,我们将详细讲解如何在Java Spring Boot应用程序中集成Zookeeper,包括如何安装和配置Zookeeper,如何使用Zookeeper进行服务发现和配置管理等。 安装和配置Zookeeper 在使用…

    Java 2023年5月15日
    00
  • 基于Session的国际化实现方法

    实现国际化(i18n)是许多网站和应用程序都必须处理的一个问题。其中一种实现方式是使用基于 Session 的国际化实现方法。此方法可以根据用户的浏览器语言设置来自动切换语言,并且可以设置不同的语言优先级,从而实现多语言支持。 下面是基于 Session 的国际化实现方法的完整攻略: 设置支持的语言 首先,需要在应用程序中定义所支持的语言。这可以通过在应用程…

    Java 2023年6月15日
    00
  • java版微信公众平台消息接口应用示例

    首先,我们需要明确,本攻略是针对Java版的微信公众平台消息接口应用示例。下面,我将详细讲解Java版微信公众平台消息接口应用示例的完整攻略。 环境准备 在开始开发前,首先需要准备好以下环境: Java JDK 1.8及以上 Apache Maven Eclipse或其他Java开发IDE 项目创建 在IDE中创建一个Maven项目,选择纯Java项目,并添…

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