使用maven插件优化项目
使用maven插件优化项目
记录可以用于优化项目的maven插件。
依赖问题
当项目开发维护了一段时间时,经常会有项目打包速度慢,jar依赖多,依赖关系错综复杂,这种问题是项目维护最常见的问题,由于开发人员在bugfix或者feature开发时往往只是往项目中添加jar依赖,我们需要分析出项目中哪些依赖是用到的,哪些依赖是多余的。
为了解决这一问题,可以通过 mvn dependency:analyze
来查看依赖问题(analyze命令用于单独执行,也可以在pom配置中加上analyze-only
goal和mvn打包一起使用)。
通常会有如下的输出日志:
1 | [INFO] --- maven-dependency-plugin:2.8:analyze (default-cli) @ xxxproject --- |
对于日志中的Used undeclared dependencies found
和Unused declared dependencies found
我们分别介绍下处理方案。
Used undeclared dependencies found
Used undeclared dependencies found
是指某些依赖的包在代码中有用到它的代码,但是它并不是直接的依赖(就是说没有在pom中直接声明),是通过引入传递的包。
因此,对于Used undeclared dependencies found
的包,可以通过直接在pom文件的依赖中显式声明。
Unused declared dependencies found
Unused declared dependencies found
指我们在pom中声明了依赖,但是在实际代码中并没有用到这个包!也就是多余的包。 这个时候我们就可以把这个依赖从pom中剔除。
注意: 这里说的代码没有用到,指的是在代码中没有显式引用,并不是意味着真的没有用到这些包(例如spi方式引入的代码).对于这种情况可以在
<ignoredUsedUndeclaredDependencies>
配置中增加这些包。
重复资源
用于查找classpath下重复的class和resource。
1 | <plugin> |
如果在日志中发现重复的类,可以将通过mvn dependency:tree
找到对应的依赖将其exclude掉。
规则检查
enforcer
Maven Enforcer插件是一个用于强制执行特定规则的Maven插件。它可以帮助您确保项目中的依赖项和构建环境符合特定的要求,例如强制使用特定版本的Java、强制执行依赖项收敛规则等。Maven Enforcer插件非常有用,可以确保项目的稳定性和可靠性。
Maven Enforcer插件提供了许多规则,可以根据需要进行配置。例如:
- Require Java Version:强制要求使用特定版本的Java。
- Require Maven Version:强制要求使用特定版本的Maven。
- Require Plugin Versions:强制要求所有插件定义版本。
- Dependency Convergence:强制要求依赖项收敛,即确保项目中只使用一个版本的依赖项。
- Banned Dependencies:禁止使用特定的依赖项。
- Require Property:强制要求使用特定的属性。
- Require Upper Bound Dependencies: 要求所有依赖的符合最低版本。