【问题标题】:Maven and optional runtime dependenciesMaven 和可选的运行时依赖项
【发布时间】:2013-04-10 09:14:09
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

    标签: java maven


    【解决方案1】:

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

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

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

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

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

    不久前也有关于可选依赖项的讨论:Best strategy for dealing with optional dependencies - 它也可能会有所帮助。

    【讨论】:

    • 谢谢。今晚我会看看这个。
    • K,另一个线程看起来很有趣,但不能帮助我解决问题。如果是我的代码,我会有一些机会,但是在不属于我的代码中处理选项只是痛苦的。我喜欢 mvn help:effective-pom 虽然。我仍然认为调查所需依赖项的 pom 和识别选项似乎是我现在唯一的选择。我会等着看看有没有其他人有任何答案,然后考虑回答这个问题。
    • 耶 - 从这个意义上说不是一个答案 :) 我偶然发现了一份报告:maven.apache.org/plugins/maven-project-info-reports-plugin/… - 也许在报告部分也有一些提供有关可选依赖项的信息
    猜你喜欢
    • 2014-09-02
    • 2015-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-19
    • 2011-11-07
    • 1970-01-01
    • 2012-10-21
    相关资源
    最近更新 更多