Maven build插件之Maven-assembly-plugin自定义打包

前言
Maven-assembly-plugin是maven中针对打包任务而提供的标准插件,可以实现自定义打包。主要提供如下功能:
  • 提供一个把工程依赖元素、模块、网站文档等其他文件存放到单个归档文件里。
  • 打包成指定格式分发包,支持各种主流的格式如zip、tar.gz、jar和war等,具体打包哪些文件是高度可控的。
  • 能够自定义包含/排除指定的目录或文件。
个人理解:
Maven-assembly-plugin只是一个自定义的打包插件,本身不编译工程,工程的编译还是依赖于maven默认绑定插件中的maven-compiler-plugin来完成的。

使用步骤
  • 工程的pom.xml里配置Assembly插件。
  • 需要指定一个Assembly描述符文件,该文件指定了打包格式,包含的文件/过滤的文件等信息,可以同时指定多个描述符文件,打包成不同的格式;
使用 descriptors,指定打包文件 src/assembly/src.xml,在该配置文件内指定打包操作。最终在pom.xml中的配置形如:

描述符文件元素
id

<id>release</id>

id 标识符,添加到生成文件名称的后缀符。如果指定 id 的话,目标文件则是 ${artifactId}-${id}.tar.gz
formats
maven-assembly-plugin 支持的打包格式有zip、tar、tar.gz (or tgz)、tar.bz2 (or tbz2)、jar、dir、war,可以同时指定多个打包格式

<formats>
    <format>tar.gz</format>
   <format>dir</format>
</formats>
dependencySets
用来定制工程依赖 jar 包的打包方式,核心元素如下表所示。
元素
类型
作用
outputDirectory
String
指定包依赖目录,该目录是相对于根目录
includes/include*
List<String>
包含依赖
excludes/exclude*
List<String>
排除依赖
<dependencySets>
    <dependencySet>
        <outputDirectory>/lib</outputDirectory>
    </dependencySet>
</dependencySets>
fileSets
管理一组文件的存放位置,核心元素如下表所示。
元素
类型
作用
outputDirectory
String
指定文件集合的输出目录,该目录是相对于根目录
includes/include*
List<String>
包含文件
excludes/exclude*
List<String>
排除文件
fileMode
String
指定文件属性,使用八进制表达,分别为(User)(Group)(Other)所属属性,默认为 0644
<fileSets>
    <fileSet>
        <includes>
            <include>bin/**</include>
        </includes>
        <fileMode>0755</fileMode>
    </fileSet>
    <fileSet>
        <includes>
            <include>/conf/**</include>
            <include>logs</include>
        </includes>
    </fileSet>
</fileSets>
files
可以指定目的文件名到指定目录,其他和 fileSets 相同,核心元素如下表所示。
元素
类型
作用
source
String
源文件,相对路径或绝对路径
outputDirectory
String
输出目录
destName
String
目标文件名
fileMode
String
设置文件 UNIX 属性
<files>
    <file>
        <source>README.txt</source>
        <outputDirectory>/</outputDirectory>
    </file>
</files>



==========================================================
******************* Maven-assembly-plugin配置示例 *********************
==========================================================

需求:目前公司有三个环境:测试、预发、生产,每个环境有各自不同的配置,在没使用Maven-assembly-plugin自定义打包之前,发到不同环境的项目需要手动修改配置,这样容易改漏,一改漏必然会导致严重的问题,所以我们引入Maven-assembly-plugin自定义打多个包,每个包使用不同环境的配置文件,发版时只需要将对应环境的包发上去解压即可。
java工程自定义打包示例
示例项目使用的是wenwo-platform-customer
根目录下存放的是测试环境的配置文件,pre对应预发配置文件,pro对应生产配置文件
1.建立不同环境的配置文件夹
在配置文件根目录下建立不同环境的配置文件夹,配置文件根目录为src/main/resources,在当前目录下建立pre,pro文件夹


2.复制差异文件并修改
将有不同环境下不同配置的文件复制到pre,pro目录下,并将配置文件修改为相应环境下的配置
这里仅给出其中一处配置修改的示例:
比如mongo连接配置,不同环境的连接端口不通,从左到右以此是测试、预发、生产的配置,它们分别位于src/main/resources、src/main/resources/pre、src/main/resources/pro目录下
3.建立assembly文件
在src/main目录下建立assembly文件夹,用来存放Assembly描述符文件
分别建立assembly.xml、assembly-pre.xml、assembly-pro.xml文件
assembly.xml文件内容如下:


assembly-pre.xml文件内容如下:
关键配置已在图中通过备注标记出来了

assembly-pro.xml的配置同理,这里就不贴出来了。这里主要通过备注解析一些关键配置,备注只会说明配置的主要功能,具体的详细说明及更多使用详见上面的“描述符文件元素”
4.pom.xml种配置assembly插件
在pom.xml的<build><plugins>的标签下添加如下配置:

web工程自定义打包示例
web工程的自定义打包同上,这里仅有assembly描述文件不同,同时只需要建立assembly-pre.xml和assembly-pro.xml描述文件。因为执行maven build时会自动执行默认绑定的plugin,java项目会执行maven-jar-plugin打一个jar包,而web项目会执行maven-war-plugin打一个war包,所以测试的war包不需要额外打。
注:因是公司项目,这里就不贴出源码了。因为csdn文章中不能上传附件,原文中是存在若干配置文件附件的,如有需要可前往我的有道云笔记查看比对,欢迎批评指正。

http://note.youdao.com/noteshare?id=56b99990bf89e88cae71123e0a7d2618&sub=5036BA7C812242658F733F03544A8609

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果你在使用 Maven 时遇到找不到插件 maven-assembly-plugin 的问题,可以尝试以下解决方法: 1. 检查 Maven 的配置文件 settings.xml 中是否配置了正确的镜像源。可以在该文件中添加如下配置: ``` <mirrors> <mirror> <id>aliyunmaven</id> <name>aliyun maven</name> <url>https://maven.aliyun.com/repository/public</url> <mirrorOf>*</mirrorOf> </mirror> </mirrors> ``` 这个配置会将 Maven 的默认镜像源替换为阿里云的镜像源,由于阿里云的镜像源是国内访问速度较快的镜像源之一,可以尝试使用这个配置来解决找不到插件的问题。 2. 检查 Maven 的本地仓库中是否已经下载了 maven-assembly-plugin 插件。可以在本地仓库的目录中查找是否有以下路径存在: ``` ~/.m2/repository/org/apache/maven/plugins/maven-assembly-plugin/ ``` 如果该路径不存在,说明 Maven 还没有下载该插件,可以尝试执行以下命令来下载该插件: ``` mvn dependency:get -Dartifact=org.apache.maven.plugins:maven-assembly-plugin:3.3.0 ``` 这个命令会下载 maven-assembly-plugin 插件的最新版本到本地仓库中。 3. 检查 Maven 的 pom.xml 文件中是否正确引入了 maven-assembly-plugin 插件。可以在 pom.xml 文件中添加以下配置: ``` <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <version>3.3.0</version> </plugin> </plugins> </build> ``` 这个配置会让 Maven 在构建时自动引入 maven-assembly-plugin 插件,如果该插件已经下载到本地仓库中,就可以正常使用了。 如果以上方法都无法解决问题,可以尝试在 Maven 的命令中加入 -U 参数来强制更新本地仓库中的插件版本。命令如下: ``` mvn clean package -U ``` 这个命令会清除 Maven 的缓存,并从远程仓库下载最新的插件版本到本地仓库中。如果该插件版本存在问题,可以尝试使用其他版本来解决问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值