Maven 插件核心:插件目标 (goal),执行格式
mvn 插件前缀:目标;生命周期阶段会自动绑定对应插件目标。 插件配置写在pom.xml的build/plugins节点。
1. maven-compiler-plugin 编译插件(最常用)
作用:指定 Java 源码版本、编译版本、编码,JDK 版本控制。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.11.0</version>
<configuration>
<source>17</source> <!-- 源码Java版本 -->
<target>17</target> <!-- 编译输出class版本 -->
<encoding>UTF-8</encoding>
<release>17</release> <!-- 推荐,替代source/target(JDK9+) -->
</configuration>
</plugin>
常用命令:
mvn compile # 调用插件compile目标,编译main源码
mvn test-compile # 编译test源码
2. maven-resources-plugin 资源文件拷贝插件
作用:复制 src/main/resources、src/test/resources 资源文件到 target,支持过滤占位符 ${xxx}。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>3.3.1</version>
<configuration>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
开启资源过滤(替换 properties 变量)一般在
build/resources配置,不是插件内。
3. maven-surefire-plugin 单元测试插件
作用:执行 JUnit / TestNG 单元测试,mvn test 默认调用。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.1.2</version>
<configuration>
<skipTests>false</skipTests> <!-- 是否跳过测试 -->
<!-- 排除某些测试类 -->
<excludes>
<exclude>**/*DemoTest.java</exclude>
</excludes>
</configuration>
</plugin>
命令:
mvn test
# 跳过测试(不执行单元测试,依然编译测试代码)
mvn install -DskipTests
# 完全跳过编译+执行测试
mvn install -Dmaven.test.skip=true

4. maven-jar-plugin 打包 Jar 插件
作用:把编译后的 class、资源打包成 jar 包,mvn package 默认执行。 可配置 MANIFEST.MF(主类、依赖路径)。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.3.0</version>
<configuration>
<archive>
<manifest>
<mainClass>com.example.DemoApplication</mainClass>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
</manifest>
</archive>
</configuration>
</plugin>
⚠️ 普通 jar 包不包含依赖,运行时需要把依赖 jar 放到 lib 目录。
5. maven-dependency-plugin 依赖插件(高频工具插件)
作用:拷贝依赖、解压依赖、分析依赖树、列出依赖。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>3.6.0</version>
</plugin>
常用命令:
# 打印依赖树(排查jar冲突首选)
mvn dependency:tree
# 把所有依赖jar拷贝到 target/lib
mvn dependency:copy-dependencies -DoutputDirectory=target/lib
# 分析依赖,找出未使用/声明但未使用的依赖
mvn dependency:analyze
6. maven-assembly-plugin 自定义打包插件
作用:定制打包结构,打包成 tar.gz/zip,可把依赖 + 脚本 + 配置一起打进压缩包。常用于项目部署包。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.6.0</version>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef> <!-- 打包所有依赖到一个jar -->
</descriptorRefs>
<archive>
<manifest>
<mainClass>com.example.DemoApplication</mainClass>
</manifest>
</archive>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
jar-with-dependencies:胖 jar,所有依赖打进同一个 jar;缺点:容易类冲突。 命令:mvn package
7. maven-shade-plugin 胖 Jar 打包插件(SpringBoot 早期常用)
相比 assembly,shade 可以重命名依赖包名,解决包冲突(比如 guava、protobuf 冲突)。SpringBoot 现在用 spring-boot-maven-plugin。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.5.0</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>com.example.DemoApplication</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
8. spring-boot-maven-plugin(SpringBoot 项目专属)
SpringBoot 项目优先用这个,内置打包可执行 jar,支持
java -jar直接运行,内置依赖。
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>3.2.0</version>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
命令:
mvn package
java -jar target/demo.jar

9. maven-clean-plugin 清理插件
作用:删除 target 目录,mvn clean。
mvn clean
一般不需要在 pom 配置,生命周期自带。
10. maven-site-plugin 生成项目文档站点
mvn site
生成项目 javadoc、依赖报告、测试报告等网页文档。
11. maven-javadoc-plugin 生成 JavaDoc 文档
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>3.6.0</version>
</plugin>
mvn javadoc:javadoc
插件选型速记表
补充小知识点
Maven 插件分两类:内置插件(clean、compiler、resources、jar、surefire);第三方插件(shade、assembly、spring-boot)
插件目标绑定生命周期:
mvn package会依次执行 clean → compile → test → package 等阶段,阶段绑定插件 goal 自动执行。查看插件所有目标:
mvn 插件名:helpmvn dependency:help
本文原创作者:易君召,详见:https://www.yijunzhao.cn/authors/yijunzhao,转载请注明出处。
原文链接
欢迎访问 小易撩挨踢