Java 防止并行多次调用ant依赖项

Java 防止并行多次调用ant依赖项,java,ant,parallel-builds,antcall,Java,Ant,Parallel Builds,Antcall,背景: 我有一个编译java代码的构建过程,并使用已编译的类构建两个jar(每个jar都是不同的子集,其中一些类同时出现)。 现在,我被要求用户能够分别构建每个jar,但也能够并行地将它们构建在一起(因为这样可以大大缩短总构建时间)。 所以我想出了这样一个脚本: <project> <target name="compile"> <sequential> <echo message="compile"/&

背景: 我有一个编译java代码的构建过程,并使用已编译的类构建两个jar(每个jar都是不同的子集,其中一些类同时出现)。
现在,我被要求用户能够分别构建每个jar,但也能够并行地将它们构建在一起(因为这样可以大大缩短总构建时间)。
所以我想出了这样一个脚本:

<project> 
    <target name="compile">
        <sequential>
            <echo message="compile"/>
        </sequential>
    </target>
    <target name="jar1" depends="compile">
        <sequential>
            <echo message="jar1"/>
        </sequential>
    </target>
    <target name="jar2" depends="compile">
        <sequential>
            <echo message="jar2"/>
        </sequential>
    </target>
    <target name="all-jars">
        <parallel>
            <antcall target="jar1"/>
            <antcall target="jar2"/>
        </parallel>
    </target>
</project>


但是没有给出答案。

只需使用
,除非目标“compile”中的
属性,如下所示:

。。。
...

并且您的目标只执行一次:o)

您正在尝试解决一个非常重要的问题。jar之间的相互依赖性如何?(一个jar的构建取决于另一个jar的编译类)这些jar不能并行运行。有关依赖关系管理应如何工作的更多信息,请参阅:您不能在
所有jar
目标中向
编译
目标添加依赖关系吗?由于
compile
target正在调用java编译器,并且后者只负责编译非最新的类,因此它可能会阻止在对
jar1
jar2
目标的后续调用中重新编译(
compile
target仍将从
jar1
jar2
调用,但将立即结束,因为没有进一步的工作要做。)@P.A.Cros是的,实际上我在发布此消息后不久就这样做了,否则会得到不可预测的结果。这就是我一直在使用的,尽管它工作正常,但它似乎仍然“错误”@马可康纳,我意识到根本原因是代码和部署的结构不好,但我仍然希望有一种方法让蚂蚁只运行一次任务(就像打开C++的几乎所有C++文件的IFIFF语句一样)。谢谢你的提示。它对我不起作用,因为我正在使用“antcall”重新解析整个文件并重置属性和依赖项(即使使用inheritAll=true)。我最终将“compile”作为依赖项添加到“all JAR”中。
...
<target name="compile" unless="compileDone">
    <property name="compileDone" value="true"/>
    <sequential>
        <echo message="compile"/>
    </sequential>
</target>
...