【发布时间】:2012-12-28 22:19:24
【问题描述】:
我正在开发一个大型遗留代码库,目前只能使用 java 1.4 进行编译。我需要做的一件事是让它与 1.6(现在可能是 1.7)一起工作。
head build 当前无法使用 1.6 进行编译。这有很多原因——大多数都很容易修复,比如使用enum 作为关键字,但我们正在努力与 Oracle/Sun 更新 JDBC(连接接口)以支持 java 1.4 中不可用的类型。这意味着如果我对 1.6 进行更改,主要生产构建会中断,因为像 NClob 这样的类会中断,因为它们不在 1.4 版本中;如果我不进行更改,我将无法使用 1.6 编译器进行编译。
在 java 中有没有支持条件编译/构建的模式?到目前为止,我提出的唯一计划是摆弄 ant 构建,以根据构建有条件地换入/换出类。这感觉很可怕,因此在这里向社区征求意见。
同样,问题的界限是:
- 需要能够在 1.4 上继续编译
HEAD(恐怕没有 1.6 和 1.4 兼容模式) - 还需要使用 1.6 编译的单独的头构建 - 假设这需要一些时间(因为它是一个大型代码库),因此第一个要点是允许其他人在我们准备时继续工作并交付其他更改用于 1.6 兼容性的头部构建。
- 这是一棵巨大的代码树;这意味着我们的代码都不是库依赖,而且我们不能轻易做到这一点(记住:遗留代码库
:() - 我们不允许分支(原因是我不会进入,除非我真的必须这样做)
非常感谢。
- 对于那些对我们为什么需要这样做感到好奇的人,我们的情况与此有些相似:Mixing Java 1.4 and 1.6 bytecode in a class hierarchy
【问题讨论】:
-
有一个previous SO answer 建议在ant 中使用replace 任务来实现类中的IFDEF 块。这可能比换出完整的类文件更简单。
-
这看起来很有希望 - 你想添加一个答案,以便我可以接受它是否有效?