gpt4 book ai didi

ant - 我应该如何维护 JDK7 项目,以便它们可以自动降级为 JDK6?

转载 作者:行者123 更新时间:2023-12-02 02:24:52 27 4
gpt4 key购买 nike

我自己的 API 很少,总共有大约 2000 个类。其中一些使用 JDK7 中新的 Path API。然而,大多数其他类依赖于任何新的 JDK API 或新的语言功能。所以大多数类都可以在 JDK6 环境中使用(我打算这样做)。假设我已经用 @Java7Only 注释了所有 JDK7-only 类。

我现在需要的是一种方法来或多或少地自动创建我所有项目的仅 JDK6 子集,而不引入新的版本分支或产品线(太复杂了维护)。

所有项目都是使用 Netbeans 创建的,因此使用 Ant。许多项目依赖于其他项目。

请帮我评估一下,根据我的问题,哪些思路是最合适的。每个想法可能会出现哪些问题?

所有想法的共同第一步

  • 让注释处理器搜索 @Java7Only 注释的类,并将列表存储到 properties 文件中。

想法 1(具体)

  • 编写一个工具,使用 properties 文件递归复制整个项目,JDK7-only 文件除外。
  • 通过调用ant使用JDK6构建复制的项目,从而得到一个JDK6兼容的jar。

想法2(具体)

  • 编写第二个注释处理器,它将使用 properties 文件将除 JDK7-only 文件之外的所有文件传递给 JavaCompiler 实例。
  • 要么使用 Java API 构建一个 jar,要么为此使用 Ant API。

(这将是一个仅限 Java 的想法,但可能太复杂了)

想法 X(摘要)

  • 以某种方式影响 Ant 构建过程(通过重写一些目标?)和每个符合 JDK6 的类:让 Ant 编译它的两个版本(一次使用 JDK6 编译器,另一次使用 JDK7 编译器)。
  • (JDK7-only 类只编译一次,当然是使用 JDK7 编译器)
  • 将每一束包装到一个单独的 jar 里。

思路可能存在的常见问题

  • 有些项目依赖于其他项目,因此某些操作(例如打包)应该考虑到这一点。
  • 记住:JDK7 编译器会生成向下不兼容的类文件,这就是为什么每个可能的想法都必须在源代码级别发生(在构建过程之前或期间,而不是之后)。

最佳答案

我对想法 2 的看法:

本质上,这是在编译器中调用编译器。注释处理器作为编译的一部分运行。这可以安全地完成吗? Sun 的 javac 中是否存在任何会导致问题的静态状态。 (我不知道答案,但从内存中可能有一些静态可能会导致这种情况下出现问题)。

想法 1 对我来说似乎更简单更好。

但退一步说,是否可以将所有 JDK 7 特定的东西分离到一个单独的模块中,然后单独编译成一个不同的 JAR?

  • 拥有使用 JDK 6 编译的“主要”项目(JDK 7 可以毫无问题地读取,因为它向后兼容)
  • JDK 7 特定模块(源代码位于不同的目录中,其中包括编译类路径中的“主”JAR)可以单独构建,必要时使用不同的 build.xml。

关于ant - 我应该如何维护 JDK7 项目,以便它们可以自动降级为 JDK6?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6402014/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com