ChatGPT解决这个技术问题 Extra ChatGPT

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

我收到以下警告:

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

这是什么意思?


D
Daniel Kutik

蚂蚁运行时

只需设置 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

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


Apache Ant(TM) 版本 1.8.2 于 2010 年 12 月 20 日编译
因此,如果您需要类路径中的 ant 运行时,请将其设置为 yes/true,否则设置为 no/false。我想你不需要它。
+1,很好的答案。我只是希望我可以在构建文件中的某个地方设置一次,而不是在每个 javac 调用中乱扔它......
无论如何它被设置为True?
“是否在类路径中包含 Ant 运行时库;默认为 yes,除非设置了 build.sysclasspath。通常最好将此设置为 false,这样脚本的行为对其运行的环境不敏感。 "
j
jwfearn

正如@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 元素位于项目元素内部。
@jwfearn:类似的 presetdef 技巧可以用于非内置 Ant 任务吗?我已经用 scalac 尝试过这个,但是因为较低的 build.xml 文件必须手动定义 scalac 任务,它们会覆盖我在顶层设置的任何内容。
注意,使用 presetdef 将导致 javac 任务已被重新定义的 ant 警告。将 includeantruntime 添加到每个 javac 任务可以避免这种情况。我不知道警告的缺点。但这可能对“需要”干净构建的人有用。
是的,presetdef 给出了“试图覆盖任务 javac 的旧定义”
C
Community

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

从历史上看,Ant 总是在 javac 任务可用的类路径中包含自己的运行时。因此,无论您喜欢与否,Ant 包含的任何库以及任何可用于 ant 的库都会自动出现在构建的类路径中。决定这可能不是大多数人想要的。所以现在有一个选择。如果您选择“true”(对于 includeantruntime),那么至少您知道您的构建类路径将包含 Ant 运行时。如果您选择“false”,那么您将接受构建行为将在旧版本和 1.8+ 之间发生变化的事实。看到这个警告你会很生气,但如果你的构建完全崩溃,你会更不高兴。保持这种默认行为允许未修改的构建文件在 Ant 版本之间一致地工作。


我一直认为这是有史以来最愚蠢的功能/信息。谁想要他们的配置管理工具中的“可重复构建”? ;)
这个答案似乎是唯一告诉我们警告实际含义的答案。
M
Marnen Laibow-Koser

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

s
slott

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

export ANT_OPTS=-Dbuild.sysclasspath=ignore

然后再次运行你的 ant 脚本。


这对我有很多的帮助。我正在使用 set ANT_OPTS=-Xms40M -Xmx512M -Dbuild.sysclasspath=ignore
我面临蚂蚁问题
A
Ahmad Nadeem

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

有关详细信息,请在 Ant javac 中搜索 includeAntRuntime

可以找到其他可能的值 here


G
Garun Kumar Mishra

我也遇到了同样的情况,我签入了程序和功能。有一个更新安装了 jdk1.8,它与我在 eclipse 中的 ant 旧设置(jdk1.6.0)不兼容。我安装那个更新。现在,我的 ant 项目正在构建成功。

试试看,希望这会有所帮助。