我收到以下警告:蚂蚁警告:“‘includeantruntime’没有设置”
[javac] build.xml:9: warning: 'includeantruntime' was not set,
defaulting to build.sysclasspath=last; set to false for repeatable builds
这是什么意思?
我收到以下警告:蚂蚁警告:“‘includeantruntime’没有设置”
[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://www.coderanch.com/t/503097/tools/warning-includeantruntime-was-not-set:
这是在蚂蚁1.8引入了一个不好的特性 引起的。只需将该名称的 属性添加到javac 任务,将其设置为false,并忘记它发生过 。
从http://ant.apache.org/manual/Tasks/javac.html:
是否包含在Ant运行时 库在类路径;默认 为是,除非build.sysclasspath是 集合。通常情况下,最好将其设置为 ,以便脚本的行为不是 对运行该环境的环境敏感 。
Chet Hosey写了一个很好的解释here:
从历史上看,蚂蚁总是包含在类路径自己的运行时提供给javac任务。因此,无论您是否喜欢,包含在Ant中的任何库以及任何可用于ant的库都会自动在您的构建的类路径中。
这是决定,这可能不是大多数人想要的。所以现在有一个选项。
如果您选择“true”(对于includeantruntime),那么至少您知道您的构建类路径将包含Ant运行时。如果你选择“false”,那么你接受的事实是构建行为将在旧版本和1.8+之间改变。
就像你看到这个警告一样恼火,如果你的版本完全崩溃,你会更加不快乐。保持这种默认行为允许未经修改的构建文件在Ant版本之间一致地工作。
我一直认为这是史上最愚蠢的功能/消息。谁想要他们的配置管理工具中的“可重复构建”?;) – karmakaze 2012-03-07 17:10:26
丹尼尔的回答完美无缺。这里是我添加到我的构建中的示例代码片段。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'。 – 2016-07-01 14:50:25
正如@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
将在全球范围适用,抑制警告无可奈何地在所有的项目
适用于改造具有多个javac任务的现有Ant构建文件。 presetdef元素只在项目元素内部。 – saxman 2012-05-29 16:29:36
@jwfearn:是否可以使用类似的'presetdef'技巧来处理非内置的Ant任务?我已经用'scalac'试过了,但是由于''build.xml'文件必须手动定义'scalac'任务,所以它们会覆盖我在顶层设置的任何东西。 – 2012-08-26 13:12:35
需要注意的是,使用presetdef会导致一个ant警告,javac任务已被重新定义。 Addind包括每个javac任务的执行时间以避免这种情况。我不知道警告的缺点。但是这对于那些需要干净构建的人来说可能是有用的。 – mikijov 2012-09-27 15:53:26
我面对这一点,我检查程序和功能。有一个更新已经安装了jdk1.8,它与eclipse中我的老设置(jdk1.6.0)不兼容。 我安装了该更新。 现在,我的蚂蚁项目建立成功。
试试吧,希望这会有所帮助。
编译于2010年12月20日的Apache Ant(TM)1.8.2版本 – user496949 2011-02-24 10:40:26
因此,如果您需要在类路径中使用ant运行时,请将其设置为yes/true,否则设置为no/false。我想你不需要它。 – 2011-02-24 10:46:26
是不是适合你? – 2011-02-24 10:54:37