我可以使用带有较新 JDK 的 ant 来编译较旧 Java 版本的 java,以便在编译使用较新 API 的代码时生成输出吗?

2024-05-14

我只想在我的系统上安装 JDK 8,并让 ant javac 编译操作为 java 6 环境创建工作类文件。

如果我在语法上仅使用符合 java 6 的代码,那么这种方法就有效,但我的代码可以访问 java 8 API 的方法/类,并且根据 ant 的编译操作仍然符合 java 6。

即使使用设置为 java 6 的“javac”任务属性“源”和“目标”时也是如此。我知道这会生成以下警告:[javac]警告:[选项]引导类路径未联合设置与-source 1.6。但这不是帮助我检测我的代码是否实际使用新引入的 API 元素的警告类型。

当正在编译的代码尝试使用 java 8 API 引入的方法/类时,我需要编译操作以某种方式执行某些操作。

举个例子:对于符合 java 6 的代码,如果使用 JDK 8 进行编译,我可以访问 java.lang.reflect.Constructor.getParameters(),这是从 Java 8 引入的父类 Executable 继承的方法。当代码在 java 6 执行环境中运行时,执行该语句将导致抛出 NoSuchMethodException,这是不可预见的,因此也无法处理。我需要我的 ant 编译操作生成一些不同类型的输出(停止或警告或其他内容),以便我可以自动化执行某些操作。

在这种情况下,有适合我的与蚂蚁相关的解决方案吗?


你写:

我知道这会生成以下警告:[javac]警告:[选项]引导类路径未与-source 1.6一起设置。

此警告为我们指明了正确的解决方案。除了-source and -target选项,使用javac's -bootclasspath选项指定指向的引导类路径rt.jar of 1.6。您的计算机上不必安装完整的 JDK 1.6;那个包含 API 类的 jar 就足够了。

甲骨文有交叉编译的进一步说明和选项 http://docs.oracle.com/javase/8/docs/technotes/tools/windows/javac.html#BHCIJIEG在其网站上。

请注意,此问题由JEP 247 http://openjdk.java.net/jeps/247,有望进入 Java 9 版本。那么,将会有一个-release编译器选项,组合-source, -target and -bootclasspath带有 JDK 本身附带的适当文件。所以你不需要得到那个rt.jar不再使用较旧的 JDK。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我可以使用带有较新 JDK 的 ant 来编译较旧 Java 版本的 java,以便在编译使用较新 API 的代码时生成输出吗? 的相关文章

随机推荐