欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

maven插件maven-assembly-plugin打包归纳文件zip/tar使用,

来源: javaer 分享于  点击 32259 次 点评:27

maven插件maven-assembly-plugin打包归纳文件zip/tar使用,


目录
  • 前言
  • 一、使用方式
  • 二、assembly配置文件详解
    • 1.id
    • 2.formats
    • 3.includeBaseDirectory
    • 4.fileSet
      • directory
      • outputDirectory
      • includes、excludes
    • 5.dependencySets
      • useProjectArtifact
      • outputDirectory
      • excludes
  • 三、使用assembly打包jar文件
    • 总结

      前言

      java项目运行的文件需要jar或者war格式,同时还需要使用Java命令。同时还可能包含一些外部的资源文件。因此要运行一个Java项目,需要多个文件配合才能启动。因此再发布的时候,我们可以使用maven-assembly-plugin插件,将我们项目需要的所有资源打包成一个zip或者gz的压缩包,这样我们发布出去的项目就是一整套运行环境,我们常用的一些中间件,比如Tomcat、zookeeper等都这样发布。下面给大家详细介绍通过maven-assembly-plugin来制作自己的发布包。

      一、使用方式

      和其他插件一样,要使用maven-assembly-plugin插件,我们在pom.xml中进行如下配置:

      <plugin>
      	<groupId>org.apache.maven.plugins</groupId>
      	<artifactId>maven-assembly-plugin</artifactId>
      	<version>3.4.2</version>
      	<configuration>
      		<descriptors>
      			<descriptor>assembly/package.xml</descriptor>
      		</descriptors>
      	</configuration>
      	<executions>
      		<execution>
      			<id>make-assembly</id>
      			<phase>package</phase>
      			<goals>
      				<goal>single</goal>
      			</goals>
      		</execution>
      	</executions>
      </plugin>
      

      二、assembly配置文件详解

      在上面的配置中descriptor标签引用了一个package.xml文件,这个文件也是assembly插件的解析文件,package.xml的内容如下面所示:

      <assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
          <id>win64.vm-${build.version}</id>
          <formats>
              <format>zip</format>
          </formats>
          <includeBaseDirectory>true</includeBaseDirectory>
          <fileSets>
              <fileSet>
                  <directory>plugins</directory>
                  <outputDirectory>\plugins</outputDirectory>
                  <includes>
                      <include>plugin.test.dll</include>
                  </includes>
              </fileSet>
              <fileSet>
                  <directory>prod/jvm</directory>
                  <outputDirectory>\</outputDirectory>
                  <includes>
                      <include>ServiceUpdate.bat</include>
                  </includes>
              </fileSet>
      
              <fileSet>
                  <directory>${project.build.directory}</directory>
                  <outputDirectory>\</outputDirectory>
                  <includes>
                      <include>RaspberryAgent.exe</include>
                  </includes>
              </fileSet>
      
      
          </fileSets>
      </assembly>
      

      下面对assembly配置进行详细说明

      1.id

      id标签可以指定生成的归纳文件名称,但如果我们在插件的configuration标签里面加入:

      <configuration>
          <appendAssemblyId>false</appendAssemblyId>
          <finalName>${build.finalName}</finalName>
          <descriptors>
              <descriptor>assembly/package.xml</descriptor>
          </descriptors>
      </configuration>
      

      这样ID标签就无效,生成的归纳文件名称由finalName来指定,当我们去掉appendAssemblyId和finalName,那么生成的文件就由id标签来指定,同时descriptors标签下可以添加多个配置文件,因此我们可以在一次构建时打包成多个归纳文件,这个时候就需要使用ID来指定归纳文件的名称。

      2.formats

      指定归纳文件的格式,支持的格式包含:

      • zip
      • tar
      • tar.gz (or tgz)
      • tar.bz2 (or tbz2)
      • tar.snappy
      • tar.xz (or txz)
      • tar.zst (or tzst)
      • jar
      • dir
      • war

      3.includeBaseDirectory

      表示生成的归纳文件是否包含根目录,如果包含解压时会生成和文件名相同的根目录

      4.fileSet

      这里是需要将哪些资源文件打包到归纳文件里面,具体使用如下:

      <fileSet>
          <directory>plugins</directory>
          <outputDirectory>\plugins</outputDirectory>
          <includes>
              <include>*.dll</include>
          </includes>
      </fileSet>
      

      directory

      表示源文件目录

      outputDirectory

      表示打包到归纳文件后的目录

      includes、excludes

      过滤作用,includes可以指定需要的文件。excludes可以排除不需要的文件。可以使用正则表达式来进行筛选配置。

      5.dependencySets

      这个配置可以将所有的jar文件提取出来,常见配置如下:

      <dependencySets>
          <dependencySet>
              <useProjectArtifact>true</useProjectArtifact>
              <outputDirectory>lib</outputDirectory>
              <excludes>
                  <exclude>
                      ${groupId}:${artifactId}
                  </exclude>
              </excludes>
          </dependencySet>
      </dependencySets>
      

      这样会在归纳文件中生成一个lib目录,里面包含了项目所依赖的所有jar文件。

      useProjectArtifact

      是否把本项目添加到依赖文件夹下。

      outputDirectory

      提取的jar依赖存放的文件夹,当打包成归纳文件时,归纳文件就会生成一个lib的文件夹

      excludes

      表示要排除的依赖,上面的配置我们是排除了本项目的,这样就不会把本项目的jar文件打入到lib目录下,当然我们也可以不配置excludes,而配置false也能达到同样的效果。如果要排除其他的内库,配置格式: g r o u p I d : {groupId}: groupId:{artifactId}。如下配置:

      <dependencySets>
        <dependencySet>
          ....
          <excludes>
            <exclude>org.apache.commons:commons-lang3</exclude>
            <exclude>org.apache.logging.log4j:log4j-1.2-api</exclude>
          </excludes>
        </dependencySet>
        ....
      </dependencySets>
      

      这样就会把commons-lang3和log4j-1.2-api的依赖去掉

      三、使用assembly打包jar文件

      在assembly的配置中可以选择jar和war格式的文件。因此assembly也可以用来进行jar打包,能实现maven-jar-plugin插件的功能。

      如果我们只打包一个内库的jar文件,可以添加如下配置:

      <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-assembly-plugin</artifactId>
          <version>3.4.2</version>
          <configuration>
              <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>
      

      另外我还可以使用assembly打包一个可执行的jar文件,配置如下:

      <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-assembly-plugin</artifactId>
          <version>3.4.2</version>
          <configuration>
              <archive>
                  <manifest>
                      <mainClass>com.example.testmvnpkgexespringboot.TestMvnPkgExeSpringbootApplication</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>
      

      注意这两种配置方式都会将项目依赖的所有依赖都会打包到这个jar文件中,我们可以解压打包的jar文件,内容如下:

      在这里插入图片描述

      同样,如果我要打包可执行的jar文件时,manifest的配置和maven-jar-plugin的配置一样,大家可以参照我的上一篇文章【maven插件maven-jar-plugin构建jar文件详细使用】

      总结

      使用assembly来打包可执行的jar文件,目前貌似只能用于普通的Java项目,如果要打包springboot项目还有一些问题,如果要定制化springboot项目的jar文件,还是需要借助maven-jar-plugin插件,有兴趣的同学可参照我的另外一篇文章:【使用maven对springboot项目进行瘦身分离jar的多种处理方案】

      到此这篇关于maven插件maven-assembly-plugin打包归纳文件zip/tar使用的文章就介绍到这了,更多相关maven-assembly-plugin打包内容请搜索3672js教程以前的文章或继续浏览下面的相关文章希望大家以后多多支持3672js教程!

      您可能感兴趣的文章:
      • Maven3种打包方式中maven-assembly-plugin的使用详解
      • SpringCloud maven-assembly-plugin 多级目录打包的实现
      • 使用maven-assembly-plugin如何打包多模块项目
      • 使用maven-assembly-plugin如何打包多模块项目
      相关栏目:

      用户点评