-
Configuring for Reproducible Builds
使用Maven实现重复构建。
检查当前使用的插件的版本。mvn artifact:check-buildplan
修改
pom.xml
,增加如下配置,显式指定project.build.outputTimestamp
的取值:<properties> <project.build.outputTimestamp>2023-01-01T00:00:00Z</project.build.outputTimestamp> </properties>
执行完整构建,执行如下命令:
mvn clean install
再次执行构建,同时比较二进制是否一致,执行如下命令:
mvn clean verify artifact:compare
-
Guide to creating assemblies
使用maven-assembly-plugin
,可以指定构建目标文件的文件布局和格式。
修改项目的pom.xml
,增加插件的配置,内容样例如下:<build> <plugins> <plugin> <artifactId>maven-assembly-plugin</artifactId> <version>3.3.0</version> <configuration> <descriptors> <descriptor>src/assembly/dep.xml</descriptor> </descriptors> </configuration> <executions> <execution> <id>create-archive</id> <phase>package</phase> <goals> <goal>single</goal> </goals> </execution> </executions> </plugin> </plugins> </build>
在项目路径
${project.basedir}/src/assembly
下放置布局文件,以上述配置为例,布局文件为dep.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>bin</id> <formats> <format>tar.gz</format> <format>tar.bz2</format> <format>zip</format> </formats> <fileSets> <fileSet> <directory>${project.basedir}</directory> <outputDirectory>/</outputDirectory> <includes> <include>README*</include> <include>LICENSE*</include> <include>NOTICE*</include> </includes> </fileSet> <fileSet> <directory>${project.build.directory}</directory> <outputDirectory>/</outputDirectory> <includes> <include>*.jar</include> </includes> </fileSet> <fileSet> <directory>${project.build.directory}/site</directory> <outputDirectory>docs</outputDirectory> </fileSet> </fileSets> </assembly>
执行构建,命令如下,即可观察效果。
mvn package
-
Guide to Configuring Archive Plugins
对于常规的jar
/war
/ejb
/ear
/assembly
插件,默认情况下,在构建结果文件中增加目录META-INF/maven
,包含文件pom.xml
和pom.properties
。
通过修改archive
的配置,可以关闭前述默认行为,样例如下:<project> ... <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>2.6</version> <configuration> <archive> <addMavenDescriptor>false</addMavenDescriptor> </archive> </configuration> </plugin> </plugins> </build> ... </project>
-
Configuring Maven
常见的配置,比如:- 本地仓库的路径。
- 通过代理,下载依赖软件。
- 下载依赖软件时的并行度。
- 上传构建目标文件时,增加安全性。
- 远程仓库的配置,比如镜像。
- 构建场景的配置。
- 构建工具链的配置。
-
Guide to generating sources
对于参与generate-sources
阶段的插件,构建时会自动生成代码,如下是插件antlr4-maven-plugin
的样例配置:<project> ... <build> <plugins> <plugin> <groupId>org.antlr</groupId> <artifactId>antlr4-maven-plugin</artifactId> <version>4.5.3</version> <executions> <execution> <id>antlr</id> <goals> <goal>antlr4</goal> </goals> </execution> </executions> </plugin> </plugins> </build> ... </project>
插件生成的代码,可参与后续的
compile
阶段。 -
Guide to Maven Classloading
Maven工具在运行过程中涉及到的类加载器,以及各自的用途。 -
Guide to Working with Multiple Modules
对于多个模块组成的项目,Maven 3.X版本的工作流程。 -
Guide to Working with Multiple Modules in Maven 4
对于多个模块组成的项目,Maven 4.X版本的工作流程。 -
Releasing
目前在项目中没有使用过。 -
Guide to using Ant with Maven
借助于插件maven-antrun-plugin
,在构建过程中,可以定制shell脚本,定制构建行为。
如下是样例,在generate-sources
阶段调用脚本${project.basedir}/src/main/sh/do-something.sh
:<project> <modelVersion>4.0.0</modelVersion> <artifactId>my-test-app</artifactId> <groupId>my-test-group</groupId> <version>1.0-SNAPSHOT</version> <build> <plugins> <plugin> <artifactId>maven-antrun-plugin</artifactId> <version>1.7</version> <executions> <execution> <phase>generate-sources</phase> <configuration> <tasks> <exec dir="${project.basedir}" executable="${project.basedir}/src/main/sh/do-something.sh" failonerror="true"> <arg line="arg1 arg2 arg3 arg4" /> </exec> </tasks> </configuration> <goals> <goal>run</goal> </goals> </execution> </executions> </plugin> </plugins> </build> </project>
-
Guide to using Modello
Modello的介绍,如下:在项目中没有使用过。
-
Using Extensions
自定义扩展,修改Maven的行为。 -
Building For Different Environments
利用profile,针对不同的构建场景,比如可定义不同的插件和参数。 -
Guide to Using Toolchains
构建项目时,通过使用Toolchains,构建项目时使用不同于运行Maven的JDK等。