为多个版本的 Hadoop 编码 Java 的好方法是什么?

What is a good way to code Java for multiple versions of Hadoop?

我正在为多个 Hadoop 集群编写 Java 代码,其中一个是 HDP 2.2,另一个是 CDH4。我编写的代码需要在两者上都 运行nable。这导致需要不同版本的多个 Hadoop 依赖项,这些依赖项不向后兼容。例如,HDP 版本需要使用 Protobuf for Hbase 来自定义过滤器,因为它比 0.96 更新,而 CDH4 使用 Hbase 0.94。我已经将我的代码的所有 Hadoop 依赖项减少到一个 API 中的几个包,并使用 Maven Profiles 来处理依赖于它的代码,但我想尽可能利用 DRY 原则,以便代码我写信是为了朝着 API 的方向发展,而不必在我每次进行更改时都经过精心挑选或从 HDP 复制到 CDH4。

我目前在多个 git 分支中有此代码,但很难维护。

我知道 Java 只写一次,运行 随处写,但这是其中一种情况,它似乎不太容易解决。我可以想到一些可能的选择,其中一些可能只重构不能重复到单独位置的代码:

我会将项目组织成至少 3 个子模块,例如

  • 项目
    • 普通
    • v2stuff
    • v4stuff

根据您交付项目的方式,您可能会有更多的子模块,assemble每个 hadoop 版本的最终工件。