gpt4 book ai didi

java - 如果不是最新的 Ant 清理

转载 作者:行者123 更新时间:2023-11-30 07:34:46 24 4
gpt4 key购买 nike

在 ANT 中,我有一个包含这些目标的构建文件:
INIT <-- CLEAN <-- COMPILE <-- TEST

我想通过从以前的构建中删除不必要的文件来保持构建环境的清洁。
问题是在测试阶段我想检查测试源是否与测试类一起更新,所以我不运行测试。要检查我是否需要将最后构建的类与源文件进行比较,如下所示:

<uptodate property="tests.unnecessary">
<srcfiles dir="src" includes="**/*.java"/>
<mapper type="glob" from="*.java" to="${build.dir}/classes/*.classes"/>
</uptodate>

所以我想检查是否需要测试并且:
- 如果是,清理类并重新运行编译和测试;
- 如果不是,则什么都不做。

我该怎么做?

最佳答案

你的例子 uptodate task很接近 - 您可能需要调整映射器并注意绝对路径与相对路径。也许:

<uptodate property="tests.unnecessary">
<srcfiles dir="src" includes="**/*.java"/>
<mapper type="glob" from="*.java" to="../${build.dir}/classes/*.class"/>
</uptodate>

注意映射器 to= 属性中的 .. - 大概 build.dir 在目录层次结构中处于同一级别来源。另请注意,编译后的类具有扩展名 .class 而不是“.classes”。

一旦你运行了上面的代码,你就可以使用 Ant 的 if/unless 属性 targets来控制执行。有多种方法,最基本的方法可能如下所示。当ant test 运行时,Ant 将判断是否有任何文件已过期,如果不是则跳过清理、编译和测试。另一种方法可能是使用 antcall task 从单个目标中调用一系列目标调用。 .

<target name="check" depends="init">
<uptodate property="tests.unnecessary">
<srcfiles dir="src" includes="**/*.java"/>
<mapper type="glob" from="*.java" to="${build.dir}/classes/*.class"/>
</uptodate>
</target>

<target name="init">
<echo message="Running init" />
</target>

<target name="clean" depends="check" unless="tests.unnecessary">
<echo message="Running clean" />
</target>

<target name="compile" depends="clean" unless="tests.unnecessary">
<echo message="Running compile" />
</target>

<target name="test" depends="compile" unless="tests.unnecessary">
<echo message="Running test" />
</target>

关于java - 如果不是最新的 Ant 清理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5014328/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com