当我使用路径引用ID时,Ant似乎会在运行任何任务之前先评估定义中的所有变量。例如,下面的${common.dist}${common.lib}似乎在运行任何任务之前先经过评估。

<path id="compile.classpath">
      <fileset dir="lib">
         <include name="*.jar" />
      </fileset>
      <fileset dir="${common.dist}">
         <include name="*.jar" />
      </fileset>
      <fileset dir="${common.lib}">
         <include name="*.jar" />
      </fileset>
</path>


在Ant输出中,我看到这样的内容:

Adding reference: compile.classpath
Property "common.dist" has not been set
Property "common.lib" has not been set
...
Build sequence for target(s) `package' is [...]
Complete build sequence is [...]


这使得在运行任何目标之前,似乎正在处理路径引用。

我有一个这样的编译目标:

  <target name="compile" depends="init,common">
    <javac destdir="build/classes" debug="true" deprecation="true" optimize="true">
      <src path="src/java" />
      <classpath>
        <path refid="compile.classpath" />
      </classpath>
    </javac>
  </target>


如果我将路径引用的内容复制到编译目标内部的classpath元素中,则看起来一切正常。

最佳答案

在目标运行之前,目标之外的所有任务都将按照build.xml中的出现顺序在每个版本上执行。如果要在目标外部定义的<path>中使用属性,则需要将定义属性的<property>任务也放置在目标外部且在<path>之前。如果需要在目标中加载属性,则还必须将<path>定义也放置在目标中(相同的定义或在定义属性的定义之后运行的定义)。

有关更多详细信息,请参见this question(和我的答案)。

关于java - 什么时候设置Ant路径引用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15820773/

10-09 15:47