使用目标覆盖时设置ant目标的顺序

时间:2018-02-08 20:00:21

标签: java ant

我正在覆盖从共享build.xml编译的调用,以便在我的自定义构建中首先调用compile-generated。

我使用depends =“compile-generated,shared.compile”添加我的覆盖编译目标,如文档中所示和解释的那样。但是,我的编译生成的目标现在被称为覆盖目标的第一个依赖项,而不是(因为我需要它)最后一个依赖项。

有没有人知道如何修复它以便首先调用“shared.compile”的原始依赖项,并在调用编译目标时最后调用我的重写依赖项?

我的build.xml:

<?xml version="1.0"?>
<project name="ExternalTools" basedir="." default="jar">

 <import file="../../../shared-build.xml" />

<target name="compile" depends="compile-generated, Shared.compile"/>
<target name="compile-generated">
        <mkdir dir="${classes.dir}"/>
        <javac srcdir="${src.gen.dir}"
         destdir="${classes.dir}"
         classpathref="build.classpath"
         debug="on"/>
</target>


</project>

共享“build.xml”编译目标:

<target name="compile" depends="prepare-staging-dirs,copy-dependlib-jars" description="Compile into stage directory">
                <javac srcdir="${src.dir}"
                       destdir="${classes.dir}"
                       classpathref="build.classpath"
                           includeantruntime="false"
                       debug="on"/>

                <copy todir="${classes.dir}">
                  <fileset dir="${src.dir}" includes="**/*.properties,**/*.xml,**/*.xsd,**/*.html" />
                </copy>
        </target>

1 个答案:

答案 0 :(得分:0)

依赖关系不是有序的,它们是分层的。如果同一层次结构中的两个依赖项以不需要的顺序运行,则只需依赖另一个依赖项。

在您的情况下,您可以告诉compile-generated依赖于您共享的compile依赖项。

在共享build.xml中:

<target name="compile" depends="copy-dependlib-jars,prepare-staging-dirs">
    <echo message="Running root.compile" />
</target>

<target name="copy-dependlib-jars">
    <echo message="Running copy-dependlib-jars" />
</target>

<target name="prepare-staging-dirs">
    <echo message="Running prepare-staging-dirs" />
</target>

自定义build.xml:

<import file="build.xml" />

<target name="compile" depends="compile-generated,root.compile">
    <echo message="Running custom compile" />
</target>

<target name="compile-generated" depends="copy-dependlib-jars,prepare-staging-dirs">
    <echo message="Running compile-generated" />
</target>
  

ant compile

 copy-dependlib-jars:
      [echo] Running copy-dependlib-jars

 prepare-staging-dirs:
      [echo] Running prepare-staging-dirs

 compile-generated:
      [echo] Running compile-generated

 root.compile:
      [echo] Running root.compile

 compile:
      [echo] Running custom compile