Plugins


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

7. Dependency Tools#

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