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日

相关文章

  • JAVA使用commos-fileupload实现文件上传与下载实例解析

    Java使用commons-fileupload实现文件上传与下载实例解析 简介 在web应用中,文件上传与下载是一个必不可少的功能。本文将演示使用commons-fileupload实现文件上传与下载的完整攻略,并提供两个示例来说明实现过程。 涉及技术 Java Tomcat Maven commons-fileupload 文件上传 1. 添加依赖 使用…

    Java 2023年6月15日
    00
  • Spring Security短信验证码实现详解

    Spring Security短信验证码实现详解 简介 Spring Security是一个功能强大的认证和授权框架。它提供了多种认证方案,包括用户名密码认证、OAuth2.0认证等。但是默认情况下,Spring Security没有提供短信验证码认证的实现。因此,如果我们需要在Spring Security中实现短信验证码认证,需要自己进行实现。 本文将详…

    Java 2023年6月3日
    00
  • jsp实现textarea中的文字保存换行空格存到数据库的方法

    首先,需要使用Java后端编写一个SaveTextServlet,该Servlet接收来自前端页面的POST请求,将textarea中的文字保存到数据库中。 1.前端页面代码示例: <form action="SaveTextServlet" method="post"> <textarea name…

    Java 2023年6月15日
    00
  • Spring Cloud Feign 自定义配置(重试、拦截与错误码处理) 代码实践

    下面是关于“Spring Cloud Feign 自定义配置(重试、拦截与错误码处理)”的完整攻略详情。 1. 什么是 Spring Cloud Feign Spring Cloud Feign 是一个声明式 REST 客户端,它使通过 HTTP 通信的服务调用变得更加简单。 Feign 会通过定义接口的方式来注入需要访问的远程服务,这样就可以像调用本地方法…

    Java 2023年5月20日
    00
  • 详解Struts2中对未登录jsp页面实现拦截功能

    Struts2框架提供了一种过滤器拦截机制,可以在Action类之前做一些权限控制的处理,例如对未登录的用户拦截访问特定的jsp页面。下面是针对该问题的完整攻略: 步骤一:配置Struts2的过滤器 在web.xml文件中配置Struts2的拦截器: <!–Struts2拦截器配置–> <filter> <filter-na…

    Java 2023年6月15日
    00
  • SpringMVC上传文件FileUpload使用方法详解

    下面是详细讲解“SpringMVC上传文件FileUpload使用方法详解”的完整攻略: 什么是SpringMVC文件上传? SpringMVC文件上传就是通过SpringMVC框架提供的功能,实现将文件从客户端传输到服务器端并存储到指定位置的过程。文件上传是Web应用程序经常使用的功能之一。通过SpringMVC文件上传,我们可以轻松地完成文件上传的处理,…

    Java 2023年6月15日
    00
  • 详解Java泛型及其应用

    详解Java泛型及其应用 Java泛型是Java语言中非常重要的特性之一,它可以让我们编写更加通用、安全、灵活的代码。本文将从以下几个方面为大家详解Java泛型及其应用: 什么是Java泛型 Java泛型的基础语法 Java泛型的应用 示例说明 Java泛型的限制 什么是Java泛型? Java泛型是自JDK 5.0版本(2004年)后推出的一种新特性,它是…

    Java 2023年5月23日
    00
  • maven环境变量配置讲解

    下面是详细的”Maven环境变量配置讲解”攻略,包含了配置过程、示例和注意事项。 配置Maven环境变量 在配置Maven环境变量之前,需要先下载和安装Maven。 1. 配置MAVEN_HOME环境变量 第一步是配置MAVEN_HOME环境变量。MAVEN_HOME是指Maven的安装目录,以下是配置MAVEN_HOME环境变量的步骤: 打开计算机的文件资…

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