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