我收到以下警告:
[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
这是什么意思?只需设置includeantruntime="false"
:
<javac includeantruntime="false" ...>...</javac>
javac
-task,你可能想考虑使用PreSetDef
来定义自己的javac
-task,并始终将includeantruntime="false"
设置为属性。
从http://ant.apache.org/manual/Tasks/javac.html:这是由Ant 1.8引入的一个错误功能。只需在javac任务中添加该名称的属性,将其设置为false,然后忘记它曾经发生过。
是否在类路径中包含Ant运行时库;默认为yes,除非设置了build.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
将全局应用,随意抑制所有项目中的警告。
Chet Hosey在这里进行了很好的解释:
历史上,Ant总是在javac任务可用的类路径中包含其自己的运行时。因此,任何与Ant一起包含的库和任何对于Ant可用的库都自动包含在您的构建类路径中,无论您是否喜欢。
人们认为这可能不是大多数人想要的,所以现在有了一个选项。
如果您选择“true”(对于includeantruntime),那么至少您知道您的构建类路径将包括Ant运行时。如果您选择“false”,则意味着您接受了旧版本和1.8+之间的构建行为将发生变化的事实。
尽管您看到了这个警告而感到烦恼,但如果您的构建完全崩溃,您会更加不开心。保持这种默认行为可以使未修改的构建文件在Ant的不同版本之间始终能够工作一致。
Daniel的回答非常完美。这是我添加到我的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脚本。
set ANT_OPTS=-Xms40M -Xmx512M -Dbuild.sysclasspath=ignore
。 - Paul Vargas