我收到以下警告:
[javac] build.xml:9: warning: 'includeantruntime' was not set,
defaulting to build.sysclasspath=last; set to false for repeatable builds
这是什么意思?
我收到以下警告:
[javac] build.xml:9: warning: 'includeantruntime' was not set,
defaulting to build.sysclasspath=last; set to false for repeatable builds
这是什么意思?
当前回答
Ant运行时
简单地设置includeantruntime="false":
<javac includeantruntime="false" ...>...</javac>
如果你必须多次使用javac-task,你可能会考虑使用PreSetDef来定义你自己的javac-task,它总是设置includeantruntime="false"。
额外的细节
从http://www.coderanch.com/t/503097/tools/warning-includeantruntime-was-not-set:
这是由特征错误引起的 在Ant 1.8中引入。只要加一个 将该名称的属性添加到javac Task,设置为false,然后忘记它 没有发生过。
从http://ant.apache.org/manual/Tasks/javac.html:
是否包含Ant运行时 类路径中的类库;违约 要是的,除非建造。sysclasspath是 集。通常最好将此设置为 False表示脚本的行为不是 对所处环境敏感 它在运行。
其他回答
我面对同样的情况,我在程序和功能中进行了检查。有一个更新已经安装了jdk1.8,这是不兼容我的旧设置(jdk1.6.0) ant在eclipse中。 我安装了更新。 现在,我的蚂蚁项目是构建成功。
试试吧,希望这对你有所帮助。
Ant运行时
简单地设置includeantruntime="false":
<javac includeantruntime="false" ...>...</javac>
如果你必须多次使用javac-task,你可能会考虑使用PreSetDef来定义你自己的javac-task,它总是设置includeantruntime="false"。
额外的细节
从http://www.coderanch.com/t/503097/tools/warning-includeantruntime-was-not-set:
这是由特征错误引起的 在Ant 1.8中引入。只要加一个 将该名称的属性添加到javac Task,设置为false,然后忘记它 没有发生过。
从http://ant.apache.org/manual/Tasks/javac.html:
是否包含Ant运行时 类路径中的类库;违约 要是的,除非建造。sysclasspath是 集。通常最好将此设置为 False表示脚本的行为不是 对所处环境敏感 它在运行。
正如@Daniel Kutik提到的,presetdef是一个很好的选择。特别是当一个人在一个有很多build.xml文件的项目中工作时,他不能或不愿意编辑这些文件(例如来自第三方的文件)。
要使用presetdef,在你的顶级build.xml文件中添加这些行:
<presetdef name="javac">
<javac includeantruntime="false" />
</presetdef>
现在所有后续的javac任务本质上将继承includeantruntime="false"。如果你的项目确实需要ant运行时库,你可以将它们显式添加到你的构建文件中,或者设置includeantruntime="true"。后者也将取消警告。
如果需要,后续的javac任务仍然可以显式地更改它,例如:
<javac destdir="out" includeantruntime="true">
<src path="foo.java" />
<src path="bar.java" />
</javac>
我建议不要使用ANT_OPTS。它起作用了,但它违背了警告的目的。该警告告诉用户,其构建在另一个系统上的行为可能不同。使用ANT_OPTS使这种情况更有可能发生,因为现在每个系统都需要以相同的方式使用ANT_OPTS。此外,ANT_OPTS将全局应用,在所有项目中抑制警告
丹尼尔的回答非常完美。下面是我添加到build.xml中的一个示例代码片段:
<target name="compile">
<mkdir dir="${classes.dir}"/>
<javac srcdir="${src.dir}" destdir="${classes.dir}" includeantruntime="false">
<!-- ^^^^^^^^^^^^^^^^^^^^^^^^^ -->
<classpath>
<path id="application" location="${jar.dir}/${ant.project.name}.jar"/>
<path id="junit" location="${lib.dir}/junit-4.9b2.jar"/>
</classpath>
</javac>
</target>
Chet Hosey在这里写了一个很好的解释:
Historically, Ant always included its own runtime in the classpath made available to the javac task. So any libraries included with Ant, and any libraries available to ant, are automatically in your build's classpath whether you like it or not. It was decided that this probably wasn't what most people wanted. So now there's an option for it. If you choose "true" (for includeantruntime), then at least you know that your build classpath will include the Ant runtime. If you choose "false" then you are accepting the fact that the build behavior will change between older versions and 1.8+. As annoyed as you are to see this warning, you'd be even less happy if your builds broke entirely. Keeping this default behavior allows unmodified build files to work consistently between versions of Ant.