gpt4 book ai didi

java - 如何在 Ant 编译期间强制执行 Java 1.6 标准?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:07:58 25 4
gpt4 key购买 nike

我使用 JDK 7。但是,有一个类我想编译为 Java 6 标准(意味着它必须能够在 JRE 6 上运行)。我的Ant编译命令如下:

<target name="myAntTarget">
<javac srcdir="${mysrc.dir}"
destdir="${mydest.dir}"
source="1.6"
target="1.6"
deprecation="on"
debug="on"
classpathref="mypath"
includeAntRuntime="false"
>
<include name="com/mypackage/MyClassName.java" />
</javac>
</target>

奇怪的是,Java 6 标准并未始终如一地执行。

我写的时候

ProcessBuilder.Redirect xxx = ProcessBuilder.Redirect.INHERIT;
System.out.println(xxx.toString());

代码已成功编译(意外),即使 ProcessBuilder.Redirect 仅自 Java 7 ( http://docs.oracle.com/javase/7/docs/api/java/lang/ProcessBuilder.Redirect.html ) 起才包含在 Java 中。所以它肯定不能在 Java 6 中正常运行。

但是,当我写

try (BufferedReader br =
new BufferedReader(new FileReader("C:/myrandomfile.pdf"))) {
final String sss = br.readLine();
System.out.println(sss);
}

代码编译失败。错误消息(来自 Ant)是

error: try-with-resources is not supported in -source 1.6

这一次,编译器可以检测到问题。

只要 Ant 编译的 java 文件与 Java 6 不兼容,如何确保 Ant 始终无法编译(并抛出适当的错误消息)?

最佳答案

source 属性强制遵守源代码级别。通过指定 source=1.6,您要求编译器确保源代码从语法的角度来看与 Java 1.6 规范兼容。

Xtarget 属性告诉编译器生成 class 文件,这些文件将被级别为 的 JVM 读取至少 X。通过分配 target=1.6,您要求编译器生成只能由 1.6 级以上的 JVM 读取的类。

这些参数都没有指示编译器将哪些 JDK 库用作编译时依赖项。如果要确保您的代码可以在 Java 1.6 JVM 上运行,那么您必须使用 Java 1.6 附带的 javac 编译器。此外,您可能会完全省略 target 参数,或者保留它 - 但如果保留它,请确保它确实设置为 1.6

关于java - 如何在 Ant 编译期间强制执行 Java 1.6 标准?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18696414/

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