2014-02-19 57 views
2

问题:我需要结合使用我的maven项目中的许多工件:hbase,hadoop-client,akka,spray,netflix-curator,spark。所有这些工件都依赖于其他工件的不同版本:zookeper-client,protobuf,jetty等。我花了3天时间才将所有排除的内容正确写入到版本兼容性中。所以现在我已经有了非常一致的配置。我想创建一个框架来帮助我的同事工作在类似的堆栈上,使用我的工作成果,并且不用花3天的时间写作排除。处理maven依赖中的许多冲突的解决方案。

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

我很想听听您可能会建议的解决方案。这是我的愿景:我只创建一个拥有依赖管理的父pom。在这个依赖关系管理中,我编写了所有排除项并使工件兼容。然后有人可以使用这个pom作为父项,并且只是编写依赖关系。但有一个问题。我们从netflix-curator和hadoop中排除了zookeeper,但从hbase中排除。因此,当我们使用全部3个工件时,我们会收到来自hbase的zookeeper,但只使用netflix-curator和hadoop时,我们可能会丢失所需的工件。只有在运行时我们才会收到“ClassNotFoundException”。这就是为什么我想为这种情况编写一个额外的插件。这个插件会检查:如果你依赖某个工件,你应该依赖那些从工件中排除的工件。如果你失去了一些神器,你需要添加它或者配置一个异常。 您对这样的解决方案有什么看法?

回答

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只有自己的代码,因此它们可以快速生成。一旦将库加载到容器中,每次要刷新测试站点时都只有小文件需要处理。