我正在为多个Hadoop集群编写Java代码,其中一个是HDP 2.2和另一个CDH4。我编写的代码需要在两者上都可以运行。这导致需要不同版本的多个Hadoop依赖项,这些依赖项不向后兼容。例如,HDP版本需要使用Protobuf for Hbase来定制过滤器,因为它比0.96更新,而CDH4使用Hbase 0.94。我已经将我的代码的所有Hadoop依赖性减少到一个API中的一些包,并且已经使用Maven Profiles来获取依赖于它的代码,但是如果可能的话我想利用DRY原则以便我编写的代码可以开发每次我做出更改时,都不必挑选或从HDP复制到CDH4。
我目前在多个git分支中都有这个代码,但这很难维护。
我意识到Java只能写一次,在任何地方运行,但这是其中一种似乎不容易解决的情况之一。我可以想到一些潜在的选择,其中一些可能只重构不能重复到一个单独位置的代码:
答案 0 :(得分:1)
我会将项目组织成至少3个子模块,例如
根据您交付项目的方式,您可能会有更多的子模块为每个版本的hadoop组装最终工件。