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项目是成功的。
试试吧,希望这会有帮助。