处理maven依赖项中的许多冲突的解决方案。

时间:2014-02-19 09:22:30

标签: maven dependency-management

问题:我需要在我的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”时才会认出它。这就是为什么我想为这种情况编写一个额外的插件。此插件将检查:如果您对某个工件有依赖性,则应该依赖于从该工件中排除的工件。如果丢失了一些工件,则需要添加它或配置例外。 您对此类解决方案有何看法?

1 个答案:

答案 0 :(得分:0)

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

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

我们有罐子 弹簧 CXF 贾斯珀报道 JSF Jetspeed的 Tomcat和Java 休眠&安培; MySQL的

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

我们有一个叫做“共享”的东西,可以从Apache和其他日常工具中获取所有小工具,例如日志记录,邮件,文档制作,XML解析。

批准的集合使用相同的版本号发布,以便开发人员知道要使用的集合。

这使他们的生活更轻松。

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