Maven中未使用/未声明的依赖关系是什么? 该怎么办?

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 

注意:我的运行时容器中使用了很多这些依赖关系,并且我将它们声明为提供,以避免在类path中使用不同版本的同一个库。

不知道Maven如何确定这一点。 不需要处理由此报告的所有项目,但可以根据需要使用此信息。

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

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

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

答案是:

“它是如何确定哪些是未使用的,哪些未经宣布?”。

Maven使用Object WebASM框架来分析你的原始字节码。 它遍历所有的类,然后build立这些引用的所有类的列表。 这是如何。

至于做什么,我不build议删除“未使用的,声明的依赖”,除非你确定他们确实没有被使用。