Maven插件【】:

12/31/2025 后端开发构建工具Maven

目录


参考


# Maven插件【】:

Maven依赖插件之maven-dependency-plugin (opens new window)

以下插件配置的作用是什么?配置中的插件是什么插件?通常如何使用该插件?

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <version>${maven-dependency-plugin.version}</version>
    <executions>
        <execution>
            <id>analyze-dependencies</id>
            <goals>
                <goal>analyze-only</goal>
            </goals>
            <configuration>
                <ignoredDependencies>
                    <!-- Because of SpringBoot auto-configurations, the configuration is happening outside of your application code, so Maven believes these dependencies to be unused -->
                    <!-- Static code analysis tools like (maven-dependency-plugin) can not detect runtime dependencies, so you should instruct them about runtime dependencies -->
                    <!-- https://stackoverflow.com/questions/37528928/spring-boot-core-dependencies-seen-as-unused-by-maven-dependency-plugin -->
                    <ignoredDependency>org.springframework*:*</ignoredDependency>
                    <ignoredDependency>org.apache.dolphinscheduler:dolphinscheduler-meter
                    </ignoredDependency>
                </ignoredDependencies>
                <ignoreNonCompile>true</ignoreNonCompile>
            </configuration>
        </execution>
    </executions>
</plugin>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

# Maven Dependency Plugin配置解析

# 插件基本信息

该配置使用的是Maven Dependency Pluginorg.apache.maven.plugins:maven-dependency-plugin),这是Maven核心插件之一,主要用于依赖管理相关操作。

# 配置作用分析

这个特定配置主要实现了以下功能:

  1. 依赖分析:通过analyze-only目标分析项目依赖关系
    • 识别三类依赖:已声明且使用的、已声明但未使用的、未声明但使用的依赖
    • dependency:analyze不同,analyze-only假设test-compile阶段已执行,适合在构建生命周期中使用
  2. 忽略特定依赖:配置中通过<ignoredDependencies>排除了两类依赖
    • 所有org.springframework开头的依赖(因Spring Boot自动配置机制)
    • 特定依赖org.apache.dolphinscheduler:dolphinscheduler-meter
    • 这种配置避免了因Spring Boot自动配置导致的"未使用依赖"误报
  3. 范围过滤<ignoreNonCompile>true</ignoreNonCompile>表示只分析compile范围的依赖,忽略runtimeprovided等其他范围的依赖

# 典型使用场景

  1. 依赖优化:识别并清理未使用的依赖,保持项目整洁
  2. 构建验证:在CI/CD流程中加入此检查,确保依赖声明正确
  3. Spring Boot项目:特别适用于Spring Boot项目,解决自动配置导致的依赖分析误报问题

# 使用建议

  1. 命令执行:可直接运行mvn dependency:analyze-only或作为构建生命周期的一部分执行
  2. 结果解读:注意分析结果可能存在误报(特别是注解驱动的框架如Spring Boot)
  3. 参数调整:根据项目特点调整ignoredDependencies和范围过滤参数

此配置特别适合Spring Boot项目,解决了静态分析工具无法识别运行时依赖的问题,同时保持了依赖声明的规范性检查。

除了analyze-only,maven-dependency-plugin还有哪些常用目标?它们分别有什么作用?

Maven Dependency Plugin 提供了多个常用目标(goals),每个目标都有特定的功能用途。以下是该插件最常用的目标及其作用说明:


# 1. dependency:copy

作用:将指定的依赖项从本地或远程仓库复制到指定目录,可自定义输出文件名或去除版本号。 ​典型场景​:

  • 将特定依赖(如第三方JAR)复制到项目的lib/目录
  • 构建时重命名依赖文件(如去除版本号) ​示例配置​:
<execution>
  <goals><goal>copy</goal></goals>
  <configuration>
    <artifactItems>
      <artifactItem>
        <groupId>com.alibaba</groupId>
        <artifactId>fastjson</artifactId>
        <version>1.2.83</version>
        <outputDirectory>${project.build.directory}/libs</outputDirectory>
      </artifactItem>
    </artifactItems>
  </configuration>
</execution>
1
2
3
4
5
6
7
8
9
10
11
12
13

# 2. dependency:copy-dependencies

作用:复制项目的所有依赖(包括传递依赖)到指定目录,支持过滤依赖范围。 ​典型场景​:

  • 构建独立部署包时收集所有依赖JAR
  • 为离线环境准备依赖库 ​关键参数​:
  • outputDirectory:指定输出路径
  • excludeTransitive:是否排除传递依赖(默认false)
  • stripVersion:是否去除版本号(默认false) ​示例命令​:
mvn dependency:copy-dependencies -DoutputDirectory=target/lib
1

# 3. dependency:tree

作用:以树形结构展示项目依赖关系,清晰显示依赖冲突和传递路径。 ​典型场景​:

  • 排查版本冲突(如不同模块引用了不同版本的Spring)
  • 分析依赖来源(如确定某个依赖为何被引入) ​输出示例​:
[INFO] com.example:demo:jar:1.0
[INFO] +- org.springframework:spring-core:jar:5.3.8:compile
[INFO] \- org.hibernate:hibernate-core:jar:5.4.32:compile
[INFO]    \- javax.persistence:javax.persistence-api:jar:2.2:compile
1
2
3
4

常用参数

  • Dverbose:显示冲突详情
  • Dincludes:按groupId过滤(如-Dincludes=org.springframework*

# 4. dependency:list

作用:列出项目所有直接和传递依赖,格式为groupId:artifactId:version:scope。 ​与tree的区别​:平铺式列表(无层级关系),适合机器解析。 ​典型用途​:

  • 生成依赖清单文件
  • 与其他工具(如CI系统)集成时获取依赖列表 ​示例输出​:
org.springframework:spring-core:jar:5.3.8:compile
org.hibernate:hibernate-core:jar:5.4.32:compile
1
2

# 5. dependency:unpack

作用:解压指定依赖到目录(如提取JAR中的资源文件或类文件)。 ​典型场景​:

  • 获取依赖中的配置文件或脚本
  • 分离第三方库中的特定资源(如模板文件) ​示例配置​:
<execution>
  <goals><goal>unpack</goal></goals>
  <configuration>
    <artifactItems>
      <artifactItem>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <outputDirectory>${project.build.directory}/unpack/slf4j</outputDirectory>
      </artifactItem>
    </artifactItems>
  </configuration>
</execution>
1
2
3
4
5
6
7
8
9
10
11
12

# 6. dependency:sources

作用:下载依赖的源码包到本地仓库(便于IDE调试时查看源码)。 ​配套命令​:

  • dependency:resolve:仅解析依赖(不下载)
  • dependency:resolve-plugins:解析插件依赖 ​示例命令​:
mvn dependency:sources
1

# 其他实用目标

目标 作用 适用场景
analyze 分析依赖使用情况(比analyze-only更严格) 检查未声明但使用的依赖
purge-local-repository 清理本地仓库中的依赖 强制重新下载依赖
build-classpath 生成类路径字符串 脚本化启动应用

# 使用建议

  1. 组合使用:例如先用tree分析依赖关系,再用copy-dependencies打包。
  2. 生命周期绑定:如将copy-dependencies绑定到package阶段实现自动化。
  3. 参数调优:通过<configuration>细化控制(如过滤特定Scope的依赖)。

完整目标列表可参考官方文档 (opens new window)

上次更新时间: 8/3/2025, 10:09:53 AM