【发布时间】: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