Java条件编译同时支持1.4/1.6

标签 java ant legacy jdk1.4

我正在处理目前仅使用 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 兼容性而构建。
  • 这是一棵庞大的代码树;这意味着我们的代码都不是库依赖项,我们不能轻易做到这一点(记住:遗留代码库 :( )
  • 我们不允许分支(出于某种原因,除非我真的必须,否则我不会进入)

非常感谢。

最佳答案

这就是 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/

相关文章:

java - 如何通过wsgen生成wsdl作为ant任务

java - 包装 slf4j API

java - 比较列表<String[]>

java - 使用 ant 和 ivy 管理重复的 jar 文件

java - java war应用程序的安全部署

java - 使用 ANT 如何在 Hudson 上构建和部署非 Maven 项目

java - 删除或注释掉不工作的 JUnit 测试?

linux - 为什么现代操作系统需要这么多内存?

java - 在android中使用带有multipart的HttpUrlConnection上传文件的进度非常快

java - 使用 Guava 不可变集合作为方法参数和/或返回类型