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

2024-02-20 08:04

本文主要是介绍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使用详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/727524

相关文章

vue使用docxtemplater导出word

《vue使用docxtemplater导出word》docxtemplater是一种邮件合并工具,以编程方式使用并处理条件、循环,并且可以扩展以插入任何内容,下面我们来看看如何使用docxtempl... 目录docxtemplatervue使用docxtemplater导出word安装常用语法 封装导出方

Linux换行符的使用方法详解

《Linux换行符的使用方法详解》本文介绍了Linux中常用的换行符LF及其在文件中的表示,展示了如何使用sed命令替换换行符,并列举了与换行符处理相关的Linux命令,通过代码讲解的非常详细,需要的... 目录简介检测文件中的换行符使用 cat -A 查看换行符使用 od -c 检查字符换行符格式转换将

使用Jackson进行JSON生成与解析的新手指南

《使用Jackson进行JSON生成与解析的新手指南》这篇文章主要为大家详细介绍了如何使用Jackson进行JSON生成与解析处理,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 核心依赖2. 基础用法2.1 对象转 jsON(序列化)2.2 JSON 转对象(反序列化)3.

使用Python实现快速搭建本地HTTP服务器

《使用Python实现快速搭建本地HTTP服务器》:本文主要介绍如何使用Python快速搭建本地HTTP服务器,轻松实现一键HTTP文件共享,同时结合二维码技术,让访问更简单,感兴趣的小伙伴可以了... 目录1. 概述2. 快速搭建 HTTP 文件共享服务2.1 核心思路2.2 代码实现2.3 代码解读3.

Elasticsearch 在 Java 中的使用教程

《Elasticsearch在Java中的使用教程》Elasticsearch是一个分布式搜索和分析引擎,基于ApacheLucene构建,能够实现实时数据的存储、搜索、和分析,它广泛应用于全文... 目录1. Elasticsearch 简介2. 环境准备2.1 安装 Elasticsearch2.2 J

使用C#代码在PDF文档中添加、删除和替换图片

《使用C#代码在PDF文档中添加、删除和替换图片》在当今数字化文档处理场景中,动态操作PDF文档中的图像已成为企业级应用开发的核心需求之一,本文将介绍如何在.NET平台使用C#代码在PDF文档中添加、... 目录引言用C#添加图片到PDF文档用C#删除PDF文档中的图片用C#替换PDF文档中的图片引言在当

详解C#如何提取PDF文档中的图片

《详解C#如何提取PDF文档中的图片》提取图片可以将这些图像资源进行单独保存,方便后续在不同的项目中使用,下面我们就来看看如何使用C#通过代码从PDF文档中提取图片吧... 当 PDF 文件中包含有价值的图片,如艺术画作、设计素材、报告图表等,提取图片可以将这些图像资源进行单独保存,方便后续在不同的项目中使

Java中List的contains()方法的使用小结

《Java中List的contains()方法的使用小结》List的contains()方法用于检查列表中是否包含指定的元素,借助equals()方法进行判断,下面就来介绍Java中List的c... 目录详细展开1. 方法签名2. 工作原理3. 使用示例4. 注意事项总结结论:List 的 contain

C#使用SQLite进行大数据量高效处理的代码示例

《C#使用SQLite进行大数据量高效处理的代码示例》在软件开发中,高效处理大数据量是一个常见且具有挑战性的任务,SQLite因其零配置、嵌入式、跨平台的特性,成为许多开发者的首选数据库,本文将深入探... 目录前言准备工作数据实体核心技术批量插入:从乌龟到猎豹的蜕变分页查询:加载百万数据异步处理:拒绝界面

Android中Dialog的使用详解

《Android中Dialog的使用详解》Dialog(对话框)是Android中常用的UI组件,用于临时显示重要信息或获取用户输入,本文给大家介绍Android中Dialog的使用,感兴趣的朋友一起... 目录android中Dialog的使用详解1. 基本Dialog类型1.1 AlertDialog(