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

 更新时间:2024年02月20日 09:16:46   作者:老码龙  
java项目运行的文件需要jar或者war格式,同时还需要使用Java命令,本文主要介绍了maven插件maven-assembly-plugin打包归纳文件zip/tar使用,具有一定的参考价值,感兴趣的可以了解一下

前言

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打包内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 解析Java的Jackson库中Streaming API的使用

    解析Java的Jackson库中Streaming API的使用

    这篇文章主要介绍了解析Java的Jackson库中Streaming API的使用,Jackson被用于Java对象和JSON的互相转换,需要的朋友可以参考下
    2016-01-01
  • spring的jdbctemplate的crud的基类dao

    spring的jdbctemplate的crud的基类dao

    本文主要介绍了使用spring的jdbctemplate进行增删改查的基类Dao的简单写法,需要的朋友可以参考下
    2014-02-02
  • 关于TransmittableThreadLocal线程池中线程复用问题的解决方案

    关于TransmittableThreadLocal线程池中线程复用问题的解决方案

    这篇文章主要介绍了关于TransmittableThreadLocal线程池中线程复用问题的解决方案,线程池复用线程,如果子线程执行完未移除上下文,则会导致后续线程可以取到之前线程设置的属性,需要的朋友可以参考下
    2023-11-11
  • springboot整合minio的超详细教程

    springboot整合minio的超详细教程

    在很多互联网产品应用中,都涉及到各种与文件存储相关的业务,随着技术的发展,关于如何解决分布式文件存储也有了比较成熟的方案,比如私有云部署下可以考虑fastdfs,阿里云对象存储oss,七牛云等,本篇将为你介绍另一种文件存储方式,即MinIO,需要的朋友可以参考下
    2023-12-12
  • Mybatis配置错误:java.lang.ExceptionInInitializerError

    Mybatis配置错误:java.lang.ExceptionInInitializerError

    这篇文章主要介绍了Mybatis配置错误:java.lang.ExceptionInInitializerError的相关资料,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12
  • 如何运行SpringBoot项目的方法

    如何运行SpringBoot项目的方法

    这篇文章主要介绍了如何运行SpringBoot项目的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03
  • Spring注解开发@Bean和@ComponentScan使用案例

    Spring注解开发@Bean和@ComponentScan使用案例

    这篇文章主要介绍了Spring注解开发@Bean和@ComponentScan使用案例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-09-09
  • 解决Request.getParameter获取不到特殊字符bug问题

    解决Request.getParameter获取不到特殊字符bug问题

    这篇文章主要介绍了解决Request.getParameter获取不到特殊字符bug问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • java抓取网页或文件中的邮箱号码

    java抓取网页或文件中的邮箱号码

    这篇文章主要为大家详细介绍了java如何抓取网页或文件中的邮箱号码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-03-03
  • java实现发送邮件的示例代码

    java实现发送邮件的示例代码

    这篇文章主要介绍了java如何实现发送邮件,文中示例代码非常详细,帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-07-07

最新评论