5

我开始修复一个使用 maven 的 java 项目,虽然我已经构建了项目,但在运行时它因缺少依赖项而失败。我看过了,错误缺少包含的编译时依赖项的可选依赖项。我可以通过并添加这些,但在我看来,我可以让所有东西都构建和运行得很好,只是因为我错过了使用缺少的依赖项的一些代码,整个事情就崩溃了。

我真正想知道的是是否有一种自动方法来查找我选择不包含的可选依赖项。我已经使用过mvn dependency:tree,但这仅显示了我拥有的依赖项(不确定它检查的范围)并且我已经尝试过mvn dependency:analyze,但这似乎显示了它认为我不使用的依赖项以及那些已被间接删除的依赖项。我看不到的是如何查看我不包括的选项列表。

目前我解决这个问题的方法是阅读 pom 并尝试从那里解决它,但我不认为这特别健壮。

作为参考,我对 maven 风格的依赖管理还很陌生,而且表面上很喜欢它,但是这个可选的东西对我来说有点绊脚石。我知道可选选项阻止我拉下我不会使用的依赖项,但它并没有让我知道如何锻炼可用的选项以及我确实需要的选项。

我正在使用 Eclipse Juno、m2Eclipse(也有 maven 3.0.5 cli)、java 6/7。

任何人都知道如何更好地做到这一点,或者我完全忽略了什么?

4

1 回答 1

2

不,事情是——有点——就是这样。Maven 不进行依赖管理,它允许您通过提供使用和分析它们的工具来进行依赖管理。所以工作仍然在开发人员方面。人们经常把它混为一谈。

这主要是由于项目通常具有不同的部署目标。结果,有时他们会收集一堆 jar 文件,这些文件会被复制一次到 tomcat 中,而另一组文件则用于 weblogic。因此,您的项目中可能有一个自述文件,其中说明了在部署 Maven 工件之前要复制的内容。或者它是隐含的知识——那你就完蛋了。

dependency:analyze 作用于字节码而不是源。因此它看不到 maven 知道什么。

也许mvn help:effective-pom为分析整个事情提供了更好的基础?或者您可以尝试修改依赖插件以显示该信息。Maven 插件并不难使用。

我不知道显示所有可选传递依赖项的插件。但是由于依赖项的 pom.xml 文件已下载到本地 maven 存储库中,因此您可以在那里进行文本搜索。

前段时间也有关于可选依赖项的讨论:处理可选依赖项的最佳策略- 它也可能会有所帮助。

于 2013-04-16T09:34:21.830 回答