Maven dependency:analyze
抱怨我的项目中的依赖关系。它如何确定哪些是未使用的,哪些是未声明的?我该怎么办?
范例:
$ mvn dependency:analyze
...
[WARNING] Used undeclared dependencies found:
[WARNING] org.slf4j:slf4j-api:jar:1.5.0:provided
[WARNING] commons-logging:commons-logging:jar:1.1.1:compile
[WARNING] commons-dbutils:commons-dbutils:jar:1.1-osgi:provided
[WARNING] org.codehaus.jackson:jackson-core-asl:jar:1.6.1:compile
...
[WARNING] Unused declared dependencies found:
[WARNING] commons-cli:commons-cli:jar:1.0:compile
[WARNING] org.mortbay.jetty:servlet-api:jar:2.5-20081211:test
[WARNING] org.apache.httpcomponents:httpclient:jar:4.0-alpha4:compile
[WARNING] commons-collections:commons-collections:jar:3.2:provided
[WARNING] javax.mail:mail:jar:1.4:provided
注意:这些依赖中的很多都在我的运行时容器中使用,我将它们声明为提供的,以避免在不同版本的类路径上两次使用相同的库。
4条答案
按热度按时间vaj7vani1#
我不知道Maven是如何决定的。不要求解决本报告所报告的所有项目,但可酌情使用此信息。
至于 * 未使用的声明依赖项 *,删除它们是一个好主意。为什么要在项目中添加不必要的依赖项?但是,传递性可能会带来这些,也许,与您的运行时版本冲突。在这种情况下,您需要指定它们-本质上是为了控制
version
。顺便说一句,
mvn dependency:tree
给出了项目的依赖关系树,这使您能够更好地了解每个依赖关系如何适应您的项目。628mspwn2#
答案是:
“它如何确定哪些是未使用的,哪些是未申报的?“.
Maven使用Object WebASM框架来分析原始字节码。它遍历所有的类,然后构建这些类引用的所有类的列表。就是这样
至于怎么做,我不建议删除“未使用的,声明的依赖项”,除非你绝对确定它们实际上没有使用。
jv4diomz3#
已使用 un 声明的依赖项
简单地说,它们是传递依赖,* 你正在使用它们 *,但 * 没有在POM文件中显式声明它们。
在下面的图中,是橙子色的。
提示:
最好在POM文件中声明它们,使其与第一级依赖项松散耦合,这样,如果将来他们计划更改其实现,不再使用这种传递依赖项,您的应用程序将是安全的!
Unused declared dependencies
简单地说,它们是依赖项,* 您在POM文件中声明它们 *,而不在应用程序代码中使用它们 *。
在下面的图表中,红色的。
提示:
最好从POM文件中删除它们,因为它们没有被使用,并保存应用程序工件的最终大小,以避免任何开发人员错误地使用错误的类!
wgx48brx4#
这可以通过在pom.xml中添加
ignoredUnusedDeclaredDependencies
轻松解决