maven 使用assembly 进行打包的方法

  1. Maven 使用 assembly 进行打包的方法

Maven 使用 assembly 进行打包的方法是通过配置一个 assembly 插件,在打包时将需要的文件或路径包含进去,生成所需要的压缩包或解压后的文件夹。下面是完整的攻略:

步骤一:在 pom.xml 文件中添加 assembly 插件。

在 pom.xml 中的 build 标签中添加如下内容:

<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-assembly-plugin</artifactId>
      <version>3.3.0</version>
      <configuration>
        <descriptors>
          <descriptor>src/main/assembly/assembly.xml</descriptor>
        </descriptors>
      </configuration>
      <executions>
        <execution>
          <phase>package</phase>
          <goals>
            <goal>single</goal>
          </goals>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>

其中,descriptor 标签中配置的是 assembly 描述文件的路径,这里的路径是相对于项目根目录。在执行打包操作时,插件的执行顺序在 package 阶段。

步骤二:添加 assembly 描述文件。

在项目根目录下的 src/main/assembly/ 目录中添加 assembly 描述文件,这个文件用来指定需要包含哪些文件或路径、生成的文件夹名、打包成的压缩包的格式等配置。一个简单的描述文件内容如下:

<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3 http://maven.apache.org/xsd/assembly-1.1.3.xsd">
  <id>example</id>
  <formats>
    <format>zip</format>
  </formats>
  <includeBaseDirectory>false</includeBaseDirectory>
  <files>
    <file>
      <source>${project.build.directory}/${project.build.finalName}.jar</source>
      <outputDirectory>/</outputDirectory>
    </file>
  </files>
  <dependencySets>
    <dependencySet>
      <outputDirectory>/lib</outputDirectory>
      <includes>
        <include>*:jar</include>
      </includes>
      <useProjectArtifact>false</useProjectArtifact>
      <scope>runtime</scope>
    </dependencySet>
  </dependencySets>
</assembly>

其中,id 标签定义了描述文件的名称。formats 标签定义了所生成的压缩包的格式。includeBaseDirectory 标签用来指定是否将所需要的文件或路径包含在一个文件夹中,默认是 true,这里设为 false 是为了方便在根目录中找到所需要的文件。files 标签配置了需要包含哪些文件,dependencySets 标签配置了需要加入的 maven 依赖库。

步骤三:执行打包操作。

执行如下指令,打包就可以自动执行了:

$ mvn clean package

执行后,所生成的压缩包或解压后的文件所在路径为 target 目录下。

  1. 示例一:打包 web 项目

假如有一个 web 项目,需要将其项目文件、依赖库和配置文件打成 war 包,可以按照以下方式配置 assembly 插件:

在 pom.xml 文件中添加如下内容:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-assembly-plugin</artifactId>
  <version>3.3.0</version>
  <configuration>
    <descriptors>
      <descriptor>src/main/assembly/assembly.xml</descriptor>
    </descriptors>
  </configuration>
  <executions>
    <execution>
      <phase>package</phase>
      <goals>
        <goal>single</goal>
      </goals>
      <configuration>
        <appendAssemblyId>false</appendAssemblyId>
        <finalName>${project.name}-${project.version}</finalName>
        <archive>
          <manifest>
            <addClasspath>true</addClasspath>
            <mainClass>com.example.Main</mainClass>
          </manifest>
          <manifestEntries>
            <Build-Date>timestamp</Build-Date>
          </manifestEntries>
        </archive>
        <webResources>
          <resource>
            <directory>src/main/webapp</directory>
          </resource>
        </webResources>
      </configuration>
    </execution>
  </executions>
</plugin>

其中,appendAssemblyId 标签设为 false 可以避免生成的文件名带上 assemblyId,finalName 标签用来定义生成文件的名称,archive 标签用于指定 jar 包的主类和 MANIFEST.MF 文件的内容,webResources 标签定义了 web 项目的源文件夹。

在项目根目录下的 src/main/assembly/ 目录中添加 assembly 描述文件,如下:

<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3 http://maven.apache.org/xsd/assembly-1.1.3.xsd">
  <id>war</id>
  <formats>
    <format>war</format>
  </formats>
  <includeBaseDirectory>false</includeBaseDirectory>
  <fileSets>
    <fileSet>
      <directory>${project.build.directory}</directory>
      <outputDirectory>/</outputDirectory>
      <includes>
        <include>*.war</include>
      </includes>
    </fileSet>
    <fileSet>
      <directory>${project.build.directory}</directory>
      <outputDirectory>WEB-INF/lib</outputDirectory>
      <includes>
        <include>*.jar</include>
      </includes>
    </fileSet>
  </fileSets>
</assembly>

其中,id 标签设为 war,formats 标签设为 war,fileSets 标签中的 fileSet 标签分别配置了所需要包含的文件夹、输出路径和文件类型。

执行如下指令,打包就可以自动执行了:

$ mvn clean package

执行后,所生成的 war 包所在路径为 target 目录下。

  1. 示例二:打包带有外部配置文件的项目

假如有一个 java 项目,需要将项目所需的配置文件、依赖库和 jar 文件打成 zip 包,并将外部配置文件和 main class 分别放在根目录和 lib/ 目录下,可以按照以下方式配置 assembly 插件:

在 pom.xml 文件中添加如下内容:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-assembly-plugin</artifactId>
  <version>3.3.0</version>
  <configuration>
    <descriptors>
      <descriptor>src/main/assembly/assembly.xml</descriptor>
    </descriptors>
  </configuration>
  <executions>
    <execution>
      <phase>package</phase>
      <goals>
        <goal>single</goal>
      </goals>
      <configuration>
        <appendAssemblyId>false</appendAssemblyId>
        <finalName>${project.name}-${project.version}</finalName>
        <archive>
          <manifest>
            <addClasspath>true</addClasspath>
            <mainClass>com.example.Main</mainClass>
          </manifest>
        </archive>
        <fileSets>
          <fileSet>
            <directory>${project.build.directory}</directory>
            <outputDirectory>/lib</outputDirectory>
            <includes>
              <include>*.jar</include>
            </includes>
          </fileSet>
        </fileSets>
      </configuration>
    </execution>
  </executions>
</plugin>

其中,appendAssemblyId 和 finalName 标签配置同上,archive 标签用于指定 jar 包的主类和 MANIFEST.MF 文件的内容,fileSets 标签定义了需要加入的文件。

在项目根目录下的 src/main/assembly/ 目录中添加 assembly 描述文件,如下:

<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3 http://maven.apache.org/xsd/assembly-1.1.3.xsd">
  <id>zip</id>
  <formats>
    <format>zip</format>
  </formats>
  <includeBaseDirectory>false</includeBaseDirectory>
  <fileSet>
    <directory>src/main/resources</directory>
    <outputDirectory>/</outputDirectory>
  </fileSet>
</assembly>

其中,id 和 formats 标签配置同上,includeBaseDirectory 标签设为 false,fileSet 标签指定了需要加入的文件夹和输出路径。

执行如下指令,打包就可以自动执行了:

$ mvn clean package

执行后,所生成的 zip 包所在路径为 target 目录下。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:maven 使用assembly 进行打包的方法 - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • 手写简版kedis分布式key及value服务的实现及配置

    下面是实现“手写简版kedis分布式key及value服务的实现及配置”的完整攻略: 1. 简介 kedis是一个分布式缓存系统,类似于redis和memcached,但使用协议更为简单和高效。本攻略将介绍如何手写一个简版的kedis,实现分布式key及value服务的配置。 2. 实现 2.1. 算法选择 kedis的实现依赖于哈希算法,用于计算key的h…

    Java 2023年5月20日
    00
  • JSP简介

    JSP 简介 JSP(Java Server Pages)是一种动态的网页技术,它可以让开发人员将 Java 代码嵌入到 HTML 页面中。JSP 页面首先被翻译成 Java 代码,然后编译成 Servlet 类,最后将 Servlet 类加载到 Web 服务器中。当 Web 客户端请求 JSP 页面时,Web 服务器会处理该请求并返回 Servlet 的执…

    Java 2023年6月15日
    00
  • 详解Mybatis的分页插件

    MyBatis是一款非常流行的ORM框架,它在开发过程中会遇到分页查询的需求。MyBatis原生不支持分页功能,因此需要使用MyBatis的分页插件。下面是详解MyBatis的分页插件的攻略。 1. 安装分页插件 在MyBatis项目中,添加分页插件是很简单的,只需两步即可: 在pom.xml中添加分页插件的依赖: <dependency> &l…

    Java 2023年5月20日
    00
  • 部分网站允许空白referer的防盗链图片的js破解代码

    为了防止恶意网站站点盗取自己的资源,很多网站都会设置防盗链,限制只有自己网站的页面可以访问这些资源。其中一个最常用的防盗链方式是检测请求的referer字段,如果不符合条件则拒绝访问。referer字段记录了当前请求来源的URL地址,一般情况下只有在通过链接点击进入目标页面时referer才会非空。 而某些网站会允许访问者通过空referer字段访问一些资源…

    Java 2023年6月15日
    00
  • Geotools基本增删改查Feature

    postgis依赖 <dependency> <groupId>org.geotools</groupId> <artifactId>gt-main</artifactId> <version>27.2</version> </dependency> <de…

    Java 2023年4月24日
    00
  • Spring自定义参数解析器设计

    作者:京东零售 王鹏超 1.什么是参数解析器 @RequstBody、@RequstParam 这些注解是不是很熟悉? 我们在开发Controller接口时经常会用到此类参数注解,那这些注解的作用是什么?我们真的了解吗? 简单来说,这些注解就是帮我们将前端传递的参数直接解析成直接可以在代码逻辑中使用的javaBean,例如@RequstBody接收json参…

    Java 2023年4月17日
    00
  • java中重写equals和重写hashCode()

    Java中的equals()方法用于比较两个对象是否是相同的,而hashCode()则用于给对象生成一个唯一的哈希值。在某些情况下,需要重写这两个方法来确保正确的对象比较和哈希码生成。 重写equals和hashCode()方法的原因 默认情况下,Java对象的equals()方法比较的是对象的引用。也就是说,只有当两个对象的引用指向同一个内存地址时,它们才…

    Java 2023年5月26日
    00
  • java中进制的转换,Byte与16进制的转换方法

    Java中可以通过一些方法来进行进制转换,其中包括Byte与16进制的转换方法。下面我们详细来讲解Java中进制的转换以及Byte与16进制的转换方法。 进制的转换 在Java中,我们可以通过四种进制(二进制,八进制,十进制,十六进制)之间进行相互转换。以下是简单介绍每种进制的标识符: 二进制:以0b或0B开头,例如0b1010表示10。 八进制:以0开头,…

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