一、基础构建三件套
| 插件 | 作用 | 核心绑定阶段 |
|---|---|---|
| maven-compiler-plugin | 编译 Java 源码(指定 JDK 版本) | compile、test-compile |
| maven-surefire-plugin | 执行单元测试(JUnit/TestNG) | test |
| maven-jar-plugin | 打普通 JAR 包(可指定 Main-Class) | package |
1. maven-compiler-plugin
指定 JDK 版本
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.11.0</version>
<configuration>
<source>17</source> <!-- 源码兼容版本 -->
<target>17</target> <!-- 生成字节码版本 -->
<encoding>UTF-8</encoding>
</configuration>
</plugin>
2. maven-surefire-plugin
跳过测试/指定测试类
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.0.0-M9</version>
<configuration>
<skipTests>false</skipTests> <!-- 是否全部跳过 -->
<includes>
<include>**/*Test.java</include> <!-- 只跑特定命名 -->
</includes>
</configuration>
</plugin>
二、打包与部署类
| 插件 | 作用 | 适用场景 |
|---|---|---|
| maven-war-plugin | 打 WAR 包(Web 项目) | Spring Boot 传统部署(外置 Tomcat) |
| spring-boot-maven-plugin | Spring Boot 可执行 JAR/WAR | Spring Boot 项目(内置 Tomcat) |
| maven-assembly-plugin | 打包成含依赖的 "胖 JAR"(含所有 jar) | 非 Spring Boot 项目需要独立运行 |
| maven-deploy-plugin | 上传 jar 到远程仓库(私服) | 团队内部发布共用库 |
3. spring-boot-maven-plugin
Spring Boot 标配
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.7.0</version>
<executions>
<execution>
<goals>
<goal>repackage</goal> <!-- 将普通 jar 重打成可执行 jar -->
</goals>
</execution>
</executions>
</plugin>
执行
mvn package后会在target生成xxx.jar和xxx.jar.original(原始包)。
4. maven-assembly-plugin
自定义胖包
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.6.0</version>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<mainClass>com.example.Main</mainClass>
</manifest>
</archive>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals><goal>single</goal></goals>
</execution>
</executions>
</plugin>
执行后生成
xxx-jar-with-dependencies.jar,含所有第三方依赖。
三、代码质量与规范类
| 插件 | 作用 |
|---|---|
| maven-checkstyle-plugin | 检查代码风格(是否符合 Google/Sun 规范) |
| maven-pmd-plugin | 静态代码分析(找潜在 bug、重复代码) |
| jacoco-maven-plugin | 单元测试覆盖率报告(生成 HTML 报表) |
5. jacoco-maven-plugin
测试覆盖率
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.8.10</version>
<executions>
<execution>
<goals>
<goal>prepare-agent</goal> <!-- 运行时注入监控 -->
</goals>
</execution>
<execution>
<id>report</id>
<phase>verify</phase>
<goals><goal>report</goal></goals>
</execution>
</executions>
</plugin>
执行
mvn verify后生成target/site/jacoco/index.html。
四、代码生成与资源处理类
| 插件 | 作用 |
|---|---|
| maven-resources-plugin | 复制/过滤资源文件(支持占位符替换) |
| maven-antrun-plugin | 在 Maven 生命周期中执行 Ant 脚本(灵活定制) |
| maven-dependency-plugin | 复制/解压依赖到指定目录 |
6. maven-dependency-plugin
将依赖复制到 lib 目录
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>3.6.0</version>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals><goal>copy-dependencies</goal></goals>
<configuration>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
<includeScope>runtime</includeScope>
</configuration>
</execution>
</executions>
</plugin>
常用于非 Spring Boot 项目,将 jar 分离到 lib 文件夹。
五、辅助开发类
| 插件 | 作用 | 常用命令 |
|---|---|---|
| maven-help-plugin | 查看 POM 生效配置、激活的 profile | mvn help:effective-pom |
| maven-enforcer-plugin | 强制规则检查(如 Maven 版本、JDK 版本) | 构建时自动执行 |
| build-helper-maven-plugin | 添加额外源码目录、解析版本号 | 多模块项目 |
7. maven-enforcer-plugin
禁止用 Java 8 以下构建
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-enforcer-plugin</artifactId>
<version>3.4.0</version>
<executions>
<execution>
<id>enforce-java</id>
<goals><goal>enforce</goal></goals>
<configuration>
<rules>
<requireJavaVersion>
<version>[17,)</version>
</requireJavaVersion>
</rules>
</configuration>
</execution>
</executions>
</plugin>
六、插件命令
有些插件无需在 pom.xml 中配置,直接在命令行使用:
| 命令 | 作用 |
|---|---|
mvn dependency:tree | 查看依赖树(排查冲突) |
mvn dependency:analyze | 分析未使用/缺失的依赖 |
mvn help:effective-pom | 查看合并后的最终 POM |
mvn clean + mvn compile | 等基础命令(由 core plugins 隐式提供) |
七、插件管理实践
1. 统一版本管理(在 <pluginManagement> 中)
父 POM 中声明版本,子模块只用 <plugin> 不加版本号:
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.11.0</version>
</plugin>
</plugins>
</pluginManagement>
2. 查看当前项目用到的所有插件
mvn help:effective-pom | grep "artifactId" # 或直接打开 target 目录查看
八、总结
插件是 Maven 的“手脚”:
- 编译用compiler,测试用surefire,打包用jar/war/spring-boot;
- 代码质量用pmd/checkstyle/jacoco;
- 排查问题用dependency/help。建议:先掌握前 3 个(compiler、surefire、spring-boot/assembly),其余按需引入即可。