Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ANT-运行单个目标,但没有依赖项_Java_Ant_Build - Fatal编程技术网

Java ANT-运行单个目标,但没有依赖项

Java ANT-运行单个目标,但没有依赖项,java,ant,build,Java,Ant,Build,我知道如何在ANT中运行单个目标,但它也会检查“depends”属性并在目标之前运行这些属性。有什么方法可以防止这种情况发生,或者有什么方法可以构造我的ANT文件,以便我可以更轻松地执行此操作?我认为您唯一的简单选择是只复制有问题的目标,并使其不具有依赖性。创建目标的“withoutdeps”版本。如果你有 <target name="A" depends="B"> ... </target> ... 改为 <target name="A" depend

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

我认为您唯一的简单选择是只复制有问题的目标,并使其不具有依赖性。

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

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

...
改为

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

<target name="AwithoutDeps">
    ...
</target>

...
现在,您可以正常调用A(这将触发B,然后在不触发deps的情况下调用A),或者只显式地调用不触发deps且不触发deps的情况下调用A。[注意,“depends”按顺序调用依赖项]


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

我会这样做:

<target name="doSomethingNoDeps">
   ...
</target>

<target name="doSomething" depends="doSomeOther">
  <antcall target="doSomethingNoDeps"/>
</target>

...

一种可能性是在依赖项目标上使用
if
除非
属性。例如:

<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>

您好,来自dependency 1!
依赖2的你好!
你好,主要目标!
现在,您可以使用
-Ddependency1.disabled=true
和/或
-Ddependency2.disabled=true
运行Ant,以省去不需要的依赖项,但默认情况下仍将包括它们

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


如果您想做与此相反的行为(默认情况下排除依赖项),只需使用
If
而不是
,除非
(并使用属性名“dependency1.enabled”而不是“disabled”)。

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

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

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


第二:



我现在正在删除depends属性(这几乎是同一件事),但我想知道一个可能更干净的解决方案。如果在ant命令行中有一个选项,那就太好了。与我的解决方案非常相似-我认为差异只是风格的问题。这利用了ant的依赖功能,我的解决方案利用了“封装”功能。谢谢!这似乎比复制和粘贴更干净。@Jared-我也考虑过antcall,但它比AFAIK更昂贵,因为它设置了属性等的副本。虽然这不是一个大问题…@Scott-如果我的构建足够快/高效,我就担心一个属性副本的成本:P…哦,有这个问题:Pan答案应该说明如何解决这个问题。展示你所做的。
<macro-jar dir="${dir.build}" />
<macro-jar dir="${dir.temp}" />