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

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

原文由 b7kich 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1k
2 个回答

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

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

至于 未使用的声明依赖 项,删除它们是个好主意。为什么要给你的项目添加不必要的依赖?但是传递性无论如何都会带来这些,也许与您的运行时版本冲突。在这种情况下,您需要指定它们——主要是为了控制 version

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

原文由 Raghuram 发布,翻译遵循 CC BY-SA 3.0 许可协议

答案:

“它如何确定哪些未使用,哪些未申报?”。

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

至于要做什么,我不建议删除“未使用的、已声明的依赖项”,除非您绝对确定它们实际上未被使用。

原文由 Zwakele Mgabhi 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题