我的Java应用程序有一个ant构建。我被迫使我的应用程序与Java 1.6兼容。
当我运行我的蚂蚁脚本时,我收到以下警告:
[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
答案 0 :(得分:2)
这意味着虽然您使用的是-source
选项,但您仍然拥有JDK 1.7库,因此javac无法保证您的代码可以在Java 1.6上运行。 Javac将检查您是否使用新的语法功能(如try-with-resources
运算符),但它无法检查您是否使用新的API方法(如java.nio.file.Files
类)。因此即使编译正确,也可能无法正常工作。
我认为最好的解决方案是使用JDK 1.6进行编译。警告建议您提供指向已安装的JRE 1.6的自定义引导类路径。因此,如果你有JRE 1.6,你可以遵循这个建议,但不想在JDK 1.6上运行整个构建。
答案 1 :(得分:1)
与javac有关。见https://blogs.oracle.com/darcy/entry/bootclasspath_older_source
使用JDK N中的javac交叉编译到旧平台 版本,正确的做法是:
- 使用较旧的-source设置。
- 将bootclasspath设置为针对旧平台的rt.jar(或等效项)进行编译。
答案 2 :(得分:1)
这与您为构建应用程序而运行的源代码或ANT脚本无关。
它与ANT本身的启动方式有关。正如您所说,您正在使用Java 1.7.0_79运行Ant。在Java 6和Java 7之间存在重要的API和库更改。为了避免这些差异并消除警告,您会发现需要在Java 6环境中运行ANT。 / p>