0

パス参照 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>

パス参照の内容をコンパイル ターゲット内のクラスパス要素にコピーすると、問題なく動作するように見えます。

4

2 に答える 2

2

答えはAnt のマニュアルにあります - パスのような構造:

デフォルトでは、パスのような構造は、それが使用されるたびにネストされたすべてのリソース コレクションを再評価します。これにより、ファイルシステムの不要な再スキャンが発生する可能性があります ...

${common.dist} および ${common.lib} プロパティを設定するのを忘れている可能性があります。それらはターゲットの外にある必要があります。

<property name="common.dist" location="dist"/>
<property name="common.lib" location="lib"/>
于 2013-04-04T20:58:25.507 に答える
2

ターゲット外のすべてのタスクは、ターゲットが実行される前に、 に表示される順序で、すべてのビルドで実行されbuild.xmlます。<path>ターゲットの外側で定義されたプロパティを使用する場合<property>は、プロパティを定義するタスクもターゲットの外側で、<path>. ターゲット内にプロパティをロードする必要がある場合は、ターゲット内にも<path>定義を配置する必要があります (同じもの、またはプロパティを定義した後に実行されるもの)。

詳細については、この質問(および私の回答) を参照してください。

于 2013-04-04T21:19:27.253 に答える