maven实用技巧篇

    xiaoxiao2021-04-15  411

    maven实用技巧篇

    多线程及跳过测试 # 用 4 个线程构建,以及根据 CPU 核数每个核分配 1 个线程进行构建 $ mvn -T 4 clean install $ mvn -T 1C clean install -DskipTests # 不执行测试用例,但编译测试用例类生成相应的 class 文件至 target/test-classes 下 -Dmaven.test.skip=true # 不执行测试用例,也不编译测试用例类 # 结合上文的`并行执行` $ mvn -T 1C clean install -Dmaven.test.skip=true # 通过指定之前失败的模块名,可以继续之前的编译 $ mvn -rf :moduleName clean install

    maven–插件篇(assembly插件)

    maven-assembly-plugin

    简单的说,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>

    versions-maven-plugin插件

    整体修改项目版本的插件

    首先在父项目的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:commit

    maven-enforcer-plugin插件

    maven插件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= 该插件内置完整的规则列表:

    执行命令

    enforcer:display-info enforcer:enforceenforcer:help -Ddetail=true -Dgoal=enforce

    enforce目标

    支持三个选项:

    -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.

    maven-shade-plugin

    用于把多个jar包,打成1个jar包 一般Java项目都会依赖其他第三方jar包,最终打包时,希望把其他jar包包含在一个jar包里。 与assembly类似,使用assembly即可。以下详解assembly。

    maven-install-plugin

    http://rogerming.iteye.com/blog/1980992

    https://www.baeldung.com/install-local-jar-with-maven/

    参考:

    本文参考博文Maven 高级玩法

    最新回复(0)