易君召
发布于 2026-09-19 / 作者:易君召 / 3 阅读
0

Maven 常用插件及用法

Maven 插件核心:插件目标 (goal),执行格式 mvn 插件前缀:目标;生命周期阶段会自动绑定对应插件目标。 插件配置写在 pom.xmlbuild/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/resourcessrc/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-compiler-plugin

指定编译 JDK

所有 Java 项目必配

maven-surefire-plugin

单元测试

JUnit 测试

maven-dependency-plugin

依赖树、拷贝依赖

排查 jar 冲突

maven-jar-plugin

普通 jar 打包

类库项目(无依赖)

maven-assembly-plugin

打包部署包 / 胖 jar

简单打包,脚本 + 配置

maven-shade-plugin

胖 jar + 包重定向

解决依赖包冲突

spring-boot-maven-plugin

SpringBoot 可执行 jar

SpringBoot 项目首选

补充小知识点

  1. Maven 插件分两类:内置插件(clean、compiler、resources、jar、surefire);第三方插件(shade、assembly、spring-boot)

  2. 插件目标绑定生命周期:mvn package 会依次执行 clean → compile → test → package 等阶段,阶段绑定插件 goal 自动执行。

  3. 查看插件所有目标:mvn 插件名:help

    mvn dependency:help

本文原创作者:易君召,详见:https://www.yijunzhao.cn/authors/yijunzhao,转载请注明出处。

原文链接 https://www.yijunzhao.cn/archives/maven-common-plugins-usage-guide

欢迎访问 小易撩挨踢

https://www.yijunzhao.cn/