Links#
https://maven.apache.org/plugins/
https://maven.apache.org/plugins/maven-compiler-plugin/
https://maven.apache.org/surefire/maven-surefire-plugin/
https://maven.apache.org/surefire/maven-failsafe-plugin/
https://maven.apache.org/enforcer/maven-enforcer-plugin/
https://www.mojohaus.org/versions/versions-maven-plugin/
1. Important Points#
plugin:
Maven 中执行任务的扩展,例如 compile、test、shade、deploy
rule:
declare plugin versions explicitly
put shared versions/config in pluginManagement
enable plugin in plugins only where needed
2. Compiler#
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.13.0</version>
<configuration>
<release>21</release>
</configuration>
</plugin>
3. Unit Test#
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.2.5</version>
</plugin>
surefire:
runs unit tests in test phase
4. Integration Test#
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>3.2.5</version>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>
failsafe:
runs integration tests and fails build at verify
5. Enforcer#
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-enforcer-plugin</artifactId>
<version>3.5.0</version>
<executions>
<execution>
<id>enforce-build</id>
<goals>
<goal>enforce</goal>
</goals>
<configuration>
<rules>
<requireMavenVersion>
<version>[3.9,)</version>
</requireMavenVersion>
<requireJavaVersion>
<version>[21,)</version>
</requireJavaVersion>
</rules>
</configuration>
</execution>
</executions>
</plugin>
6. Packaging Plugins#
| Plugin |
Use |
maven-jar-plugin |
normal jar metadata |
maven-war-plugin |
war package |
maven-shade-plugin |
fat jar with relocated classes |
maven-assembly-plugin |
custom distribution archive |
spring-boot-maven-plugin |
Spring Boot executable jar |
maven-source-plugin |
attach source jar for library consumers |
maven-javadoc-plugin |
attach API docs jar |
maven-deploy-plugin |
deploy artifact to remote repository |
maven-gpg-plugin |
sign release artifacts |
maven-toolchains-plugin |
select build JDK |
./mvnw dependency:tree
./mvnw dependency:analyze
./mvnw versions:display-dependency-updates
./mvnw versions:display-plugin-updates
dependency:analyze:
finds used undeclared and unused declared dependencies
8. Resources#
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>3.3.1</version>
<configuration>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
9. Flatten POM#
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>flatten-maven-plugin</artifactId>
<version>1.6.0</version>
</plugin>
flatten:
publishing library 时生成更干净的 consumer POM
10. Library Source And Javadoc#
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>3.3.1</version>
<executions>
<execution>
<id>attach-sources</id>
<goals>
<goal>jar-no-fork</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>3.8.0</version>
<executions>
<execution>
<id>attach-javadocs</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
source/javadoc jars:
useful for IDE navigation and public library publishing