蚂蚁警告:“'includeantruntime'未设置”

时间:2011-02-24 10:29:48

标签: java ant build javac build-tools

我收到以下警告:

[javac] build.xml:9: warning: 'includeantruntime' was not set, 
defaulting to build.sysclasspath=last; set to false for repeatable builds

这是什么意思?

7 个答案:

答案 0 :(得分:380)

Ant Runtime

只需设置includeantruntime="false"

<javac includeantruntime="false" ...>...</javac>

如果您必须多次使用javac - 任务,您可能需要考虑使用PreSetDef来定义自己的javac - 始终设置includeantruntime="false"的任务。< / p>

其他详细信息

来自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

  

是否包含Ant运行时   类路径中的库;默认   是的,除非build.sysclasspath是   组。通常最好将此设置为   false所以脚本的行为不是   对环境敏感   它运行了。

答案 1 :(得分:69)

正如@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将在全球范围内适用,在所有项目中毫不客气地禁止警告

答案 2 :(得分:60)

Chet Hosey写了一个很好的解释here

  

从历史上看,Ant总是在javac任务可用的类路径中包含自己的运行时。因此,Ant中包含的任何库以及ant可用的任何库都会自动出现在构建的类路径中,无论您是否愿意。

     

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

     

如果选择“true”(对于includeantruntime),那么至少你知道你的构建类路径将包含Ant运行时。如果您选择“false”,那么您接受这样的事实:构建行为将在旧版本和1.8 +之间发生变化。

     

如果你看到这个警告一样恼火,如果你的构建完全破坏,你会更不高兴。保持此默认行为允许未修改的构建文件在Ant版本之间保持一致。

答案 3 :(得分:26)

丹尼尔的答案非常完美。这是我添加到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>

答案 4 :(得分:5)

如果你喜欢我在命令行工作,快速回答正在执行

export ANT_OPTS=-Dbuild.sysclasspath=ignore

然后再次运行你的蚂蚁脚本。

答案 5 :(得分:5)

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

有关详细信息,请在Ant javac

中搜索includeAntRuntime

可以找到其他可能的值here

答案 6 :(得分:-3)

我面对同样的问题,我会检查程序和功能。有一个更新已安装jdk1.8与eclipse中的ant的旧设置(jdk1.6.0)不兼容。 我安装了这个更新。 现在,我的蚂蚁项目取得了成功。

尝试一下,希望这会有所帮助。