在 ant 编译 javac 期间发出警告
warning during javac compilation by ant
我为我的 Java 应用程序构建了一个 ant。我被迫让我的应用程序与 Java 1.6 兼容。
当我 运行 我的 ant 脚本时,我收到以下警告:
[javac] warning: [options] bootstrap class path not set in conjunction with -source 1.6
你能解释一下它是什么意思吗?我应该怎么做才能删除它?代码工作正常,但我要把它投入生产,我不想让这种警告得不到解决。
我的 build.xml 文件如下所示:
<path id="master-classpath">
<fileset dir="lib">
<include name="*.jar"/>
</fileset>
</path>
<target name="compile" depends="clean">
<javac srcdir="src" destdir="${bin-dir}" debug="on" source="1.6" includeantruntime="false">
<classpath refid="master-classpath"/>
</javac>
</target>
<target name="clean">
<mkdir dir="${bin-dir}"/>
<mkdir dir="${build-dir}"/>
<delete>
<fileset dir="${bin-dir}"/>
<fileset dir="${build-dir}"/>
</delete>
</target>
Ant 版本:Ant(TM) version 1.8.2
Java 版本:javac 1.7.0_79
这意味着尽管您使用了 -source
选项,但您仍然拥有 JDK 1.7 库,因此 javac 无法保证您的代码可以在 Java 1.6 上运行。 Javac 将检查您是否没有使用新的语法特征(如 try-with-resources
运算符),但它无法检查您是否正在使用新的 API 方法(如 java.nio.file.Files
class).所以即使编译正确,也不一定能运行。
我认为最好的解决方案是使用 JDK 1.6 进行编译。警告建议您提供自定义 bootstrap class 路径,该路径指向已安装的 JRE 1.6。因此,如果您有 JRE 1.6,但不想 运行 整个构建在 JDK 1.6.
上,则可以遵循此建议
与javac有关。参见 https://blogs.oracle.com/darcy/entry/bootclasspath_older_source
To use javac from JDK N to cross-compiler to an older platform
version, the correct practice is to:
- Use the older -source setting.
- Set the bootclasspath to compile against the rt.jar (or equivalent) for the older platform.
这与您的源代码或您使用的 ANT 脚本无关运行构建您的应用程序。
它与 ANT 本身的启动方式有关。正如您所说,您正在 运行ning Ant 使用 Java 1.7.0_79 在 Java 6 和 Java 之间有重要的 API 和库更改7. 为避免这些差异并消除您看到的警告,您需要在 Java 6 环境中 运行 ANT。
我为我的 Java 应用程序构建了一个 ant。我被迫让我的应用程序与 Java 1.6 兼容。
当我 运行 我的 ant 脚本时,我收到以下警告:
[javac] warning: [options] bootstrap class path not set in conjunction with -source 1.6
你能解释一下它是什么意思吗?我应该怎么做才能删除它?代码工作正常,但我要把它投入生产,我不想让这种警告得不到解决。
我的 build.xml 文件如下所示:
<path id="master-classpath">
<fileset dir="lib">
<include name="*.jar"/>
</fileset>
</path>
<target name="compile" depends="clean">
<javac srcdir="src" destdir="${bin-dir}" debug="on" source="1.6" includeantruntime="false">
<classpath refid="master-classpath"/>
</javac>
</target>
<target name="clean">
<mkdir dir="${bin-dir}"/>
<mkdir dir="${build-dir}"/>
<delete>
<fileset dir="${bin-dir}"/>
<fileset dir="${build-dir}"/>
</delete>
</target>
Ant 版本:Ant(TM) version 1.8.2
Java 版本:javac 1.7.0_79
这意味着尽管您使用了 -source
选项,但您仍然拥有 JDK 1.7 库,因此 javac 无法保证您的代码可以在 Java 1.6 上运行。 Javac 将检查您是否没有使用新的语法特征(如 try-with-resources
运算符),但它无法检查您是否正在使用新的 API 方法(如 java.nio.file.Files
class).所以即使编译正确,也不一定能运行。
我认为最好的解决方案是使用 JDK 1.6 进行编译。警告建议您提供自定义 bootstrap class 路径,该路径指向已安装的 JRE 1.6。因此,如果您有 JRE 1.6,但不想 运行 整个构建在 JDK 1.6.
上,则可以遵循此建议与javac有关。参见 https://blogs.oracle.com/darcy/entry/bootclasspath_older_source
To use javac from JDK N to cross-compiler to an older platform version, the correct practice is to:
- Use the older -source setting.
- Set the bootclasspath to compile against the rt.jar (or equivalent) for the older platform.
这与您的源代码或您使用的 ANT 脚本无关运行构建您的应用程序。
它与 ANT 本身的启动方式有关。正如您所说,您正在 运行ning Ant 使用 Java 1.7.0_79 在 Java 6 和 Java 之间有重要的 API 和库更改7. 为避免这些差异并消除您看到的警告,您需要在 Java 6 环境中 运行 ANT。