2

背景:我有一个构建过程,它编译 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>

问题是,当使用“all-jars”目标时,“compile”目标会被执行两次。有没有标准的方法来防止它?更好的是,有没有使用 antcall 的替代方法?

PS我在这里发现了一个类似的问题,但没有给出答案。

4

1 回答 1

3

只需unless在目标“编译”中使用属性,如:

...
<target name="compile" unless="compileDone">
    <property name="compileDone" value="true"/>
    <sequential>
        <echo message="compile"/>
    </sequential>
</target>
...

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

于 2019-10-12T21:35:24.137 回答