Maven插件【】:
accttodo 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
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 Plugin(org.apache.maven.plugins:maven-dependency-plugin
),这是Maven核心插件之一,主要用于依赖管理相关操作。
# 配置作用分析
这个特定配置主要实现了以下功能:
- 依赖分析:通过
analyze-only
目标分析项目依赖关系- 识别三类依赖:已声明且使用的、已声明但未使用的、未声明但使用的依赖
- 与
dependency:analyze
不同,analyze-only
假设test-compile
阶段已执行,适合在构建生命周期中使用
- 忽略特定依赖:配置中通过
<ignoredDependencies>
排除了两类依赖- 所有
org.springframework
开头的依赖(因Spring Boot自动配置机制) - 特定依赖
org.apache.dolphinscheduler:dolphinscheduler-meter
- 这种配置避免了因Spring Boot自动配置导致的"未使用依赖"误报
- 所有
- 范围过滤:
<ignoreNonCompile>true</ignoreNonCompile>
表示只分析compile
范围的依赖,忽略runtime
、provided
等其他范围的依赖
# 典型使用场景
- 依赖优化:识别并清理未使用的依赖,保持项目整洁
- 构建验证:在CI/CD流程中加入此检查,确保依赖声明正确
- Spring Boot项目:特别适用于Spring Boot项目,解决自动配置导致的依赖分析误报问题
# 使用建议
- 命令执行:可直接运行
mvn dependency:analyze-only
或作为构建生命周期的一部分执行 - 结果解读:注意分析结果可能存在误报(特别是注解驱动的框架如Spring Boot)
- 参数调整:根据项目特点调整
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
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
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
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
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 | 生成类路径字符串 | 脚本化启动应用 |
# 使用建议
- 组合使用:例如先用
tree
分析依赖关系,再用copy-dependencies
打包。 - 生命周期绑定:如将
copy-dependencies
绑定到package
阶段实现自动化。 - 参数调优:通过
<configuration>
细化控制(如过滤特定Scope的依赖)。
完整目标列表可参考官方文档 (opens new window)。