ant警告:“'包括'未被设置'

我收到以下警告:

[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来定义自己的始终设置includeantruntime="false"javac -task。

额外细节

http://www.coderanch.com/t/503097/tools/warning-includeantruntime-was-not-set

这是由Ant 1.8引入的一个错误造成的。 只需将该名称的属性添加到javac任务,将其设置为false,并忘记曾经发生过。

http://ant.apache.org/manual/Tasks/javac.html

是否在类path中包含Ant运行时库; 默认为yes,除非设置了build.sysclasspath。 通常最好将其设置为false,以便脚本的行为对运行环境不敏感。

正如@Daniel Kutik所说的, presetdef是一个不错的select。 特别是如果一个人正在使用许多build.xml文件进行工作,而这些文件不能或不愿意编辑(例如来自第三方的文件)。

要使用presetdef ,请在顶级build.xml文件中添加这些行:

  <presetdef name="javac"> <javac includeantruntime="false" /> </presetdef> 

现在所有后续的javac任务将基本上inheritanceincludeantruntime="false" 。 如果您的项目确实需要ant运行时库,则可以将它们明确地添加到您的构build文件中,或者设置includeantruntime="true" 。 后者也将摆脱警告。

如果需要,后续的javac任务仍然可以明确地更改它,例如:

 <javac destdir="out" includeantruntime="true"> <src path="foo.java" /> <src path="bar.java" /> </javac> 

我build议不要使用ANT_OPTS 。 它的工作,但它击败了警告的目的。 警告告诉一个人的构build可能在另一个系统上有不同的performance。 使用ANT_OPTS使得这更有可能,因为现在每个系统都需要以相同的方式使用ANT_OPTS 。 另外, ANT_OPTS将在全球范围内应用,在您的所有项目中都会ANT_OPTS禁止警告

Chet Hosey 在这里写了一个很好的解释:

从历史上看,Ant始终在javac任务可用的类path中包含自己的运行时。 因此,任何包含在Ant中的库,以及任何可用于Ant的库都会自动放入构build的类path中,无论您是否喜欢它。

这是决定,这可能不是大多数人想要的。 所以现在有一个选项。

如果select“true”(对于includeantruntime),那么至less你知道你的构build类path将包含Ant运行时。 如果你select“false”,那么你接受的事实是,构build行为将在旧版本和1.8 +之间改变。

就像你看到这个警告一样恼火,如果你的版本完全崩溃,你会更不高兴。 保持这种默认行为允许未经修改的构build文件在Ant的各个版本之间一致地工作。

丹尼尔的回答完美无缺。 这里是我添加到我的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> 

如果你喜欢我从命令行工作的快速答案正在执行

 export ANT_OPTS=-Dbuild.sysclasspath=ignore 

然后再运行你的ant脚本。

在你的build.xml文件中使用<property name="build.sysclasspath" value="last"/>

有关更多详细信息,请在Ant javac中searchincludeAntRuntime

其他可能的值可以在这里find

我面对这一点,我检查程序和function。 有一个更新已安装jdk1.8这是不符合我的旧设置(jdk1.6.0)在日食ant。 我安装该更新。 现在,我的ant项目是成功的。

试试吧,希望这会有帮助。