【问题标题】:Solution for handeling many conflicts in maven dependencies.处理 maven 依赖项中的许多冲突的解决方案。
【发布时间】:2014-02-19 09:22:29
【问题描述】:

问题:我需要在我的 maven 项目中结合使用许多工件:hbase、hadoop-client、akka、spray、netflix-curator、spark。所有这些工件都依赖于其他工件的不同版本:zookeper-client、protobuf、jetty 等。我花了 3 天时间来正确编写所有排除以存档版本兼容性。所以现在我有了相当一致的配置。我想创建一个框架来帮助从事类似堆栈工作的同事使用我的工作成果,而不是花 3 天时间编写排除项。

我知道 maven-enforcer-plugin,它不允许您使用不同版本的相同工件。有帮助,但还不够。

我很想听听您可能提出的解决方案。这是我的愿景:我创建一个仅具有依赖管理的父 pom。在这个依赖管理中,我编写了所有排除项并使工件兼容。然后有人可以使用这个 pom 作为父级,只需编写依赖项。但有一个问题。我们从 netflix-curator 和 hadoop 中排除了 zookeeper,但没有从 hbase 中排除。因此,当我们使用所有 3 个工件时,我们会从 hbase 接收 zookeeper,但是当仅使用 netflix-curator 和 hadoop 时,我们可能会丢失所需的工件。只有在运行时我们收到“ClassNotFoundException”时,我们才会识别它。这就是为什么我想为这个案例编写一个额外的插件。这个插件会检查:如果你依赖于某些工件,你应该依赖工件,这些工件被排除在那个工件之外。如果您丢失了某些工件,则需要添加它或配置异常。 您如何看待这样的解决方案?

【问题讨论】:

    标签: maven dependency-management


    【解决方案1】:

    Interesting answer by Ron Weeler: http://blog.artifact-software.com/tech/?p=121 这描述了我们如何解决问题。

    我们构建的库将相关库组聚合到一个 jar 中,我们在其中修复了所有版本冲突。然后,开发人员只需要依赖少数按我们想要的方式设置版本的 jar。

    我们有罐子 春天 CXF 贾斯珀报告 JSF 捷速 Tomcat 和 Java 休眠&MySQL

    等等。总共大约10个。这些代表大约 70Mb 的代码和配置。

    我们有一个叫做“shared”的工具,它从 Apache 和其他工具(如日志记录、邮件、文档生成、XML 解析)中获取所有小实用程序。

    已批准的套装发布时具有相同的版本号,以便开发人员知道要使用哪个套装。

    这让他们的生活更轻松。

    我们还将这些库作为 jar 文件提供,以便项目 jar 中只有自己的代码,以便快速构建。将库加载到容器中后,每次要刷新测试站点时,您只需处理小文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-18
      • 2011-11-02
      • 1970-01-01
      相关资源
      最近更新 更多