我开始修复一个使用了maven的java项目,虽然我已经有了要构建的项目,但是在运行时它失败并且缺少依赖项。我看了一下,错误是缺少包含编译时依赖项的可选依赖项。我可以通过添加这些内容,但在我看来,我可以将所有内容构建并运行得很好,只是因为我错过了一些缺少依赖的代码,整个事情就崩溃了。
我真正想知道的是,是否有一种自动方法可以找到我选择不包含的可选依赖项。我使用过mvn dependency:tree
但是这只显示了我所拥有的依赖项(不确定它检查的范围)并且我尝试了mvn dependency:analyze
但这似乎显示了它认为我不使用的依赖项和那些被间接拉下来了。我看不到的是如何查看我不包括的选项列表。
目前我解决这个问题的方法是阅读poms并尝试从那里开始,但我认为这并不是特别强大。
作为参考,我对maven风格依赖管理相当新,并且就像它一样,但这个可选的东西对我来说是一个绊脚石。我理解选项会阻止我拉下我不会使用的依赖关系,但它没有点击我如何可以锻炼哪些选项可用并且我确实需要。
我正在使用Eclipse Juno,m2Eclipse(也有maven 3.0.5 cli),java 6/7。
任何人对我如何做得更好,或者我完全忽略了什么都有任何想法?
答案 0 :(得分:2)
没有 - 有点 - 只是这样。 Maven不进行依赖关系管理,它允许您通过提供使用和分析它们的工具来进行依赖关系管理。所以工作仍然在开发人员方面。人们经常把它混在一起。
这主要是因为项目通常具有不同的部署目标。因此,有时他们会收集一堆jar文件,这些文件一次被复制到tomcat中,另一组文件被复制到weblogic中。因此,您的项目中可能有一个自述文件,说明在部署maven工件之前要复制的内容。或者它是隐含的知识 - 那么你就注定了。
dependency:analyze对字节码不起作用。因此,它没有看到maven知道什么。
也许mvn help:effective-pom
为分析整个事情提供了更好的基础?或者您可以尝试修改依赖插件以显示该信息。 Maven插件并不难以使用。
我不知道有一个插件显示所有可选的传递依赖项。但是由于依赖项的pom.xml文件被下载到本地maven仓库,你可以在那里进行文本搜索。
不久前还讨论了可选的依赖项:Best strategy for dealing with optional dependencies - 它也可能有用。