我正在处理目前仅使用 Java 1.4 编译的大型遗留代码库。我需要做的一件事是让它与 1.6(现在可能是 1.7)一起工作。
head build 目前不能用 1.6 编译。这有很多原因 - 大多数都很容易修复,比如使用 enum
作为关键字,但我们正在努力让 Oracle/Sun 更新 JDBC(连接接口(interface))以支持不可用的类型在 Java 1.4 中。这意味着如果我进行更改以使用 1.6,则主要生产构建会像 NClob
这样的类中断,因为它们不在 1.4 版本中;如果我不进行更改,我将无法使用 1.6 编译器进行编译。
是否有任何模式支持 java 中的条件编译/构建?到目前为止,我唯一想出的计划是摆弄 ant 构建,以根据构建有条件地换入/换出类。这感觉很糟糕,因此向这里的社区征求意见。
同样,问题的边界是:
- 需要能够在 1.4 上继续编译
HEAD
(恐怕没有 1.6 和 1.4 兼容模式) - 还需要一个使用 1.6 编译的单独的 head 构建 - 假设这将需要一些时间(因为它是一个大型代码库),因此第一个要点是允许其他人继续工作并在我们准备时交付其他更改head 为 1.6 兼容性而构建。
- 这是一棵庞大的代码树;这意味着我们的代码都不是库依赖项,我们不能轻易做到这一点(记住:遗留代码库
:(
) - 我们不允许分支(出于某种原因,除非我真的必须,否则我不会进入)
非常感谢。
- 对于那些对我们为什么需要这样做感到好奇的人,我们的情况与此有些相似:Mixing Java 1.4 and 1.6 bytecode in a class hierarchy
最佳答案
这就是 makefiles/pom.xml/build.xml 被 checkin 的原因。使用你的版本控制系统来创建一个分支。在一个分支中,进行 1.6 兼容性所需的所有更改。在其他分支中,不要。任何给定的分支都将安全地编译为 1.4 或安全地编译为 1.6,没有科学分支试图同时执行这两种操作,这是一个坏主意 (tm)。
关于Java条件编译同时支持1.4/1.6,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14327207/