我几乎没有自己的 API,总共有大约 2000 个类。其中一些使用Path
来自 JDK7 的新 API。然而,大多数其他类不依赖任何新的 JDK API 或新的语言特性。所以大多数类都可以在 JDK6 环境中使用(我打算这样做)。假设,我已经用@Java7Only
.
我现在需要的是一种或多或少地自动创建我所有项目的仅 JDK6 子集的方法,而无需引入新版本分支或产品线(维护起来太复杂)。
所有项目都是使用 Netbeans 创建的,因此使用 Ant。许多项目依赖于其他项目。
请帮我评估一下,根据我的问题,哪些想法最合适。每个想法可能会出现哪些问题?
所有想法的共同第一步
- 让注释处理器搜索带注释的
@Java7Only
类并将列表存储到properties
文件中。
想法1(具体)
- 编写一个工具,该工具将使用该
properties
文件递归地复制整个项目,但 JDK7 文件除外。 - 通过调用 ant 使用 JDK6 构建复制的项目,从而得到一个 JDK6 兼容的 jar。
想法2(具体)
- 编写第二个注释处理器,它将使用该
properties
文件将除 JDK7-only 文件之外的所有内容传递给 JavaCompiler 实例。 - 要么使用 Java API 构建一个 jar,要么为此使用 Ant API。
(这将是一个仅限 Java 的想法,但可能太复杂了)
想法 X(摘要)
- 以某种方式影响 Ant 构建过程(通过覆盖某些目标?)以及对于每个 JDK6 兼容的类:让 Ant 编译它的两个版本(一次使用 JDK6 编译器,另一次使用 JDK7 编译器)。
- (当然,JDK7 类只编译一次,使用 JDK7 编译器)
- 将每一束包装到一个单独的罐子中。
这些想法可能存在的常见问题
- 一些项目依赖于其他项目,所以一些动作(比如打包)应该考虑到这一点。
- 请记住:JDK7 编译器生成向下不兼容的类文件,这就是为什么每个可能的想法都必须发生在源代码级别(在构建过程之前或之中,而不是之后)。