代码之家  ›  专栏  ›  技术社区  ›  GreenieMeanie

Ant-运行单个目标,但不依赖

  •  8
  • GreenieMeanie  · 技术社区  · 15 年前

    我知道如何在Ant中运行单个目标,但它也会检查“depends”属性并在目标之前运行这些属性。有没有一种方法可以防止这种情况发生,或者一种方法来构造我的Ant文件,以便我可以更轻松地完成这项工作?

    5 回复  |  直到 6 年前
        1
  •  11
  •   Scott Stanchfield    15 年前

    创建目标的“WithOutDeps”版本。如果你有

    <target name="A" depends="B">
       ...
    </target>
    

    改为

    <target name="A" depends="B,AwithoutDeps"/>
    
    <target name="AwithoutDeps">
        ...
    </target>
    

    现在,您可以正常调用a(它将触发b,然后调用awitoutdeps),或者只显式调用awitoutdeps,而不触发deps。[请注意,“依赖”按顺序调用依赖项]

    当然,选择比这些更好的名字;)

        2
  •  2
  •   yalestar    15 年前

    我认为你在这里唯一的简单选择就是复制一个目标,使它不具有依赖性。

        3
  •  2
  •   Matt Solnit    15 年前

    一种可能是使用 if unless 依赖项目标的属性。例如:

    <target name="dependency1" unless="dependency1.disabled">
      <echo>Hello from dependency 1!</echo>
    </target>
    
    <target name="dependency2" unless="dependency2.disabled">
      <echo>Hello from dependency 2!</echo>
    </target>
    
    <target name="main-target" depends="dependency1, dependency2">
      <echo>Hello from the main target!</echo>
    </target>
    

    现在你可以和蚂蚁一起跑了 -Ddependency1.disabled=true 和/或 -Ddependency2.disabled=true 删除不需要的依赖项,但默认情况下仍将包括它们。

    当然,你可以简单地拥有一个“全球” dependencies.disabled 如果这对你来说更容易的话。

    如果你想做 匡威 对于此行为(默认情况下排除依赖项),只需使用 如果 而不是 除非 (并具有类似“dependency1.enabled”的属性名,而不是“disabled”)。

        4
  •  1
  •   Jared    15 年前

    我会这样做:

    <target name="doSomethingNoDeps">
       ...
    </target>
    
    <target name="doSomething" depends="doSomeOther">
      <antcall target="doSomethingNoDeps"/>
    </target>
    
        5
  •  -1
  •   pietroSV    6 年前

    我用一段代码做了宏,这是我想要的。 然后生成2个目标,1用“arg1”调用宏,2用“arg2”调用宏。 也可以在不接受参数的情况下生成宏。

    <macrodef name="macro-jar">
        <attribute name="dir" />
        <sequential>
            <jar destfile="${jar.name}">
                <fileset dir="@{dir}" .../>
                ...
                ...
            </jar>
        </sequential>
    </macrodef>
    

    从代码中的两个位置调用它:
    第一:

    <macro-jar dir="${dir.build}" />
    

    第二:

    <macro-jar dir="${dir.temp}" />