我收到以下警告:
[javac] build.xml:9: warning: 'includeantruntime' was not set, defaulting to build.sysclasspath=last; set to false for repeatable builds
这是什么意思?
简单地设置includeantruntime="false":
includeantruntime="false"
<javac includeantruntime="false" ...>...</javac>
如果你必须多次使用javac-task,你可能会考虑使用PreSetDef来定义你自己的javac-task,它总是设置includeantruntime="false"。
javac
PreSetDef
从http://www.coderanch.com/t/503097/tools/warning-includeantruntime-was-not-set:
这是由错误特征引起的 在Ant 1.8中引入。只要加一个 将该名称的属性添加到javac Task,设置为false,然后忘记它 没有发生。< / p >
从http://ant.apache.org/manual/Tasks/javac.html:
是否包含Ant运行时 类路径中的类库;违约 要是的,除非建造。sysclasspath是 集。通常最好将此设置为 False表示脚本的行为不是 对所处环境敏感 . .
是否包含Ant运行时 类路径中的类库;违约 要是的,除非建造。sysclasspath是 集。通常最好将此设置为 False表示脚本的行为不是 对所处环境敏感
切特Hosey写了一个很好的解释:
从历史上看,Ant总是在javac任务可用的类路径中包含自己的运行时。因此,Ant包含的任何库以及Ant可用的任何库都会自动出现在构建的类路径中,无论您是否喜欢。 他们认为这可能不是大多数人想要的。所以现在有了一个选择。 如果你选择“正确”;(对于includeanruntime),那么至少您知道您的构建类路径将包括Ant运行时。如果你选择“虚假”;那么您就接受了构建行为会在旧版本和1.8以上版本之间发生变化的事实。 看到这个警告您会很恼火,如果构建完全崩溃,您会更不高兴。保持这种默认行为允许未修改的构建文件在Ant版本之间一致地工作。
从历史上看,Ant总是在javac任务可用的类路径中包含自己的运行时。因此,Ant包含的任何库以及Ant可用的任何库都会自动出现在构建的类路径中,无论您是否喜欢。
他们认为这可能不是大多数人想要的。所以现在有了一个选择。
如果你选择“正确”;(对于includeanruntime),那么至少您知道您的构建类路径将包括Ant运行时。如果你选择“虚假”;那么您就接受了构建行为会在旧版本和1.8以上版本之间发生变化的事实。
看到这个警告您会很恼火,如果构建完全崩溃,您会更不高兴。保持这种默认行为允许未修改的构建文件在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脚本。
正如@Daniel Kutik提到的,presetdef是一个不错的选择。特别是当一个人在一个有很多build.xml文件的项目中工作时,他不能或不愿意编辑这些文件(例如来自第三方的文件)。
presetdef
build.xml
要使用presetdef,在顶层build.xml文件中添加以下行:
<presetdef name="javac"> <javac includeantruntime="false" /> </presetdef>
现在所有后续的javac任务本质上将继承includeantruntime="false"。如果你的项目确实需要ant运行时库,你可以显式地将它们添加到构建文件中,或者设置includeantruntime="true"。后者也将取消警告。
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将全局应用,在所有项目中无论如何都抑制警告
ANT_OPTS
在build.xml文件中使用<property name="build.sysclasspath" value="last"/>
<property name="build.sysclasspath" value="last"/>
更多详细信息,请在蚂蚁javac中搜索includeAntRuntime
includeAntRuntime
其他可能的值可以找到在这里
我面临同样的情况,我在程序和功能中检查。有一个更新已经安装了jdk1.8,这是不兼容我的旧设置(jdk1.6.0) ant在eclipse中。 我安装了更新。 现在,我的ant项目是build success.
试试吧,希望这对你有所帮助。