简单的说,maven-assembly-plugin 就是用来帮助打包用的,比如说打出一个什么类型的包,包里包括哪些内容等等。
在父项目的pom中引入该插件 <properties> <maven.assembly.plugin.version>2.3</maven.assembly.plugin.version> </properties> <build> <pluginManagement> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <version>${maven.assembly.plugin.version}</version> </plugin> </plugins> </pluginManagement> </build> 然后在负责打包分发的 distribution模块中的pom文件中重新引入该插件,如下所示: <build> <plugins> <plugin> <artifactId>maven-assembly-plugin</artifactId> <executions> <execution> <!-- 配置执行器 --> <id>assemble</id> <phase>package</phase> <!-- 绑定到package生命周期阶段上 --> <goals> <goal>single</goal> <!-- 只运行一次 --> </goals> <configuration> <finalName>flowmgr-${project.version}</finalName> <!--主类入口等--> <descriptors> <descriptor>src/assembly/bin-common.xml</descriptor> <!--配置描述文件路径--> </descriptors> <tarLongFileMode>gnu</tarLongFileMode> </configuration> </execution> </executions> </plugin> </plugins> </build>其中主要涉及两个参数的定义,分别为:goal与descriptors
goal的参数single说明该模块仅运行一次,可执行以下命令完成打包等操作。 1. mvn assembly:single & 2. mvn clean package #需要绑定到package的生命周期上 descriptors指的是打包执行器。此处仅以自定义执行器说明。一般来说,内置的assembly descriptor满足不了多样性需求,这个时候就需要写自己的assembly descriptor的实现了。使用 descriptors,指定打包文件 src/assembly/bin-common.xml,即在配置文件内指定打包操作要使用这个自定义assembly descriptor(自定义的xml中配置),需要如下配置,即要引入描述文件:
<configuration> <finalName>flowmgr-${project.version}</finalName> <!--主类入口等--> <descriptors> <descriptor>src/assembly/bin-common.xml</descriptor><!--配置描述文件路径--> </descriptors> <tarLongFileMode>gnu</tarLongFileMode> </configuration>descriptor实例:
<?xml version='1.0' encoding='UTF-8'?> <assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd"> <id>demo</id> <formats> <format>jar</format> </formats> <includeBaseDirectory>false</includeBaseDirectory> <fileSets> <fileSet> <directory>${project.build.directory}/classes</directory> <outputDirectory>/</outputDirectory> </fileSet> </fileSets> </assembly>这个定义很简单:
id <id>distribution</id>。id 标识符,添加到生成文件名称的后缀符。如果指定 id 的话,目标文件则是 ${artifactId}-${id}.tar.gzformat:指定打包类型;maven-assembly-plugin 支持的打包格式有zip、tar、tar.gz (or tgz)、tar.bz2 (or tbz2)、jar、dir、war,可以同时指定多个打包格式includeBaseDirectory:指定是否包含打包层目录(比如finalName是output,当值为true,所有文件被放在output目录下,否则直接放在包的根目录下);fileSets:指定要包含的文件集,可以定义多个fileSet;directory:指定要包含的目录;outputDirectory:指定当前要包含的目录的目的地。回到pom的配置中,自定义的configuration配置后,将会生成一个demo-demo.jar 文件在目录 output 下,其中前一个demo来自finalName,后一个demo来自assembly descriptor中的id,其中的内容和默认的打包出来的jar类似。
如果只想有finalName,则增加配置:
<appendAssemblyId>false</appendAssemblyId>对于描述文件的元素,即assembly.xml中的配置节点的详细配置,在此稍作总结,见下。
dependencySets用来定制工程依赖 jar 包的打包方式,核心元素如下表所示。
元素类型作用outputDirectoryString指定包依赖目录,该目录是相对于根目录includesList包含依赖excludesList排除依赖实例:
<dependencySets> <dependencySet> <outputDirectory>/lib</outputDirectory> <excludes> <exclude>${project.groupId}:${project.artifactId}</exclude> </excludes> </dependencySet> <dependencySet> <outputDirectory>/</outputDirectory> <includes> <include>${project.groupId}:${project.artifactId}</include> </includes> </dependencySet> </dependencySets>整体修改项目版本的插件
首先在父项目的pom.xml文件中加入
<!-- https://mvnrepository.com/artifact/org.codehaus.mojo/versions-maven-plugin --> <dependency> <groupId>org.codehaus.mojo</groupId> <artifactId>versions-maven-plugin</artifactId> <version>2.3</version> </dependency>然后执行
mvn versions:set -DnewVersion=x.y.z 或者 mvn clean org.codehaus.mojo:versions-maven-plugin:2.3:set -DnewVersion=x.y.z即将版本修改为x.y.z且每个项目的pom文件进行了备份,如果新版本有误,则撤销新版本号
mvn versions:revert当确定无误后,提交修改
mvn versions:commitmaven插件enforcer解决jar之间冲突和类冲突
enforce配置实例
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-enforcer-plugin</artifactId> <version>1.4.1</version> <executions> <execution> <id>enforce-dependencies</id> <goals> <goal>display-info</goal> <goal>enforce</goal> </goals> </execution> </executions> <configuration> <rules> <requireMavenVersion> <version>[3.0.3,)</version> </requireMavenVersion> <requireJavaVersion> <version>1.7.0</version> </requireJavaVersion> </rules> <fail>true</fail> </configuration> </plugin>该插件默认绑定在validate阶段,有三个目标 display-info和enforce、help
display-info用于显示基本环境信息enforce用于规则检查help帮助信息,mvn enforcer:help -Ddetail=true -Dgoal= 该插件内置完整的规则列表:-skip - a quick way to skip checks via a profile or using -Denforcer.skip=true from the command line.
fail- if the goal should fail the build when a rule fails. The default is true. If false, the errors will be logged as warnings.failFast - if the goal should stop checking after the first failure. The default is false.用于把多个jar包,打成1个jar包 一般Java项目都会依赖其他第三方jar包,最终打包时,希望把其他jar包包含在一个jar包里。 与assembly类似,使用assembly即可。以下详解assembly。
http://rogerming.iteye.com/blog/1980992
https://www.baeldung.com/install-local-jar-with-maven/