Maven中未使用/未声明的依赖项是什么?他们怎么办?

时间:2010-12-30 19:47:29

标签: maven dependencies maven-2

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

注意: 我的运行时容器中使用了很多这些依赖项,并且我将它们声明为提供它们以避免在类路径上使用不同版本两次使用相同的库。

2 个答案:

答案 0 :(得分:68)

不确定Maven如何判断这一点。不需要解决此报告的所有项目,但可以酌情使用此信息。

使用的未声明的依赖项是必需的,但尚未在项目中显式声明为依赖项。但是,由于项目中其他依赖项的传递依赖性,它们可用。显式声明这些依赖项是个好主意。这也允许您控制这些依赖项的版本(可能与运行时提供的版本匹配)。

对于未使用的声明的依赖项,最好删除它们。为什么要为项目添加不必要的依赖?但是,传递性可能会带来这些,或许与您的运行时版本冲突。在这种情况下,您需要指定它们 - 主要是为了控制version

顺便说一句,mvn dependency:tree给出了项目的依赖关系树,它可以让您更好地了解每个依赖关系如何适应您的项目。

答案 1 :(得分:5)

答案:

"它如何确定哪些未使用以及哪些未申报?"。

Maven使用Object WebASM框架来分析原始字节码。它遍历所有类,然后构建这些引用的所有类的列表。那是怎么回事。

至于该做什么,我不建议删除"未使用的,声明的dependecies"除非你绝对确定他们实际上没用过。