【问题标题】:How to find if I need to exclude dependencies in a maven java project?如何查找是否需要在 maven java 项目中排除依赖项?
【发布时间】:2019-03-27 17:28:06
【问题描述】:

我同时使用 Intellij IDEA (2018.3.5) 和 Eclipse IDE,但我更喜欢 Intellij。我有一个基于 Maven 的 Java 项目,有多个 pom。我在其中一个 pom 文件中添加了一些依赖项。我需要找出是否存在任何可能阻止构建在部署时运行的依赖冲突,然后排除它们。我尝试了下面给出的步骤来查找可能导致问题的冲突。它们够用还是我需要做更多?

  • 检查是否存在与mvn clean install -DskipTests 的编译时依赖冲突。构建成功,没有错误。

  • 检查 Intellij 在文件 > 项目结构 > 问题下是否显示没有问题。没有问题。

我还看到了 mvn dependency:tree -Dverbose 的依赖关系树。它有很多“省略重复”和“省略冲突”项目,但构建成功。我没有看到任何错误。这是否意味着一切都好,还是我必须对这些冲突做更多的事情?

【问题讨论】:

    标签: java maven


    【解决方案1】:

    判断您的应用程序是否一切正常的最佳方法是进行良好的测试。

    但是,通常不会从项目的 <dependency> 库中排除传递依赖项。这样做可能会以一种微妙且难以察觉的方式破坏依赖关系。删除整个<dependency> 通常更安全。

    应该使用<exclude>的场景很少:

    1. 处理不同库之间不兼容的传递依赖关系,例如A 需要库 C-1.0,但库 B 需要库 C-2.0,而 C-1.0 和 C-2.0 不能在类路径上共存。

    2. 系统已经提供了传递依赖,例如使用 TOMCAT_HOME/lib 目录中的其他 JAR 部署到 Tomcat。

    如果您决定排除依赖项,检查最终工件很重要,因为有时插件会做一些奇怪的事情,例如maven-assembly-plugin 的某些版本受一个错误影响,该错误导致在创建着色 JAR 期间解决的依赖项与用于编译的 maven-dependency-plugin 不同。

    【讨论】:

    • 谢谢。我没有删除任何。我想知道是否仅仅因为向其中一个 poms 添加了一些新的依赖项而需要排除任何内容。我刚刚更新了我的标题以澄清。 mvn clean package - 在此之后我看到一些测试失败。我正在调查他们。
    • 唯一好的答案是:有足够好的测试告诉您,如果项目构建,您可以发布。如果不需要,请尝试减少依赖项的数量。
    • 有人建议我运行该应用程序。那是出现依赖冲突的时候。我不知道这是否也需要发现冲突。
    猜你喜欢
    • 2013-04-02
    • 2011-12-15
    • 2012-02-25
    • 2014-06-23
    • 2022-11-30
    • 2018-02-23
    • 1970-01-01
    • 2022-10-04
    • 1970-01-01
    相关资源
    最近更新 更多