2

いくつかのモジュールとメインの実行可能なプロジェクトがあります。私は共通のビルドファイルを持っています、そして

build.common.xml

<target name="build" >
  <path id="libraries.classpath">
    <fileset dir="${lib.dir}" includes="*.jar" />
  </path>
  <javac srcdir="${src.dir}" destdir="${build.dir}" includeantruntime="false" source="1.6">
    <classpath refid="libraries.classpath" />
    <classpath refid="modules.classpath" />
  </javac>
</target>

..そして、すべてのモジュールは、build.xmlで独自の依存関係を宣言します。

<path id="modules.classpath">
  <pathelement path="../ModuleA/${build.dir}" />
  ...
</path>

問題は、内部依存関係がない場合、次の例外が発生することです:「参照modules.classpathが見つかりません。」

そのための解決策は何ですか?オプションのクラスパス要素を宣言するにはどうすればよいですか?

注: 誰かが私のモジュールからjarを作成することを提案したい場合は、これを正当化してください。5〜10個の急速に変化するモジュールがあり、ビルドプロセスで不要な手順を実行したくありません。

更新:ビルドを2つの異なるターゲットに抽出し、それらの条件を作成しましたが、役に立ちませんでした(「false」をエコーし​​、モジュール依存でビルドします):

<target name="build">
    <condition property="modules.classpath.set" else="false">
          <isset property="modules.classpath"/>
    </condition>

    <echo message="modules.classpath is set: ${modules.classpath.set} " />
    <antcall target="build-with-modules" />
    <antcall target="build-without-modules" />
</target>

<target name="build-with-modules" if="modules.classpath.set">
    <echo message="Building with module-dependencies" />
    <javac srcdir="${src.dir}" destdir="${build.dir}" includeantruntime="false" source="1.6">
        <classpath refid="libraries.classpath" />
        <classpath refid="modules.classpath" />
    </javac>
</target>
<target name="build-without-modules" unless="modules.classpath.set">
        <echo message="Building with  no dependent modules" />
    <javac srcdir="${src.dir}" destdir="${build.dir}" includeantruntime="false" source="1.6">
        <classpath refid="libraries.classpath" />
    </javac>
</target>
4

1 に答える 1

1

状態isreference

特定の参照がこのプロジェクトで定義されており、オプションで期待されるタイプであるかどうかをテストします。

だから、試してみてください

<condition property="modules.classpath.set" else="false">
    <isreference refid="modules.classpath"/>
</condition>

また、そのページには、カスタム条件を説明するページへのリンクがあります。提供された条件のいずれも要件を満たさない場合は、1つだけ記述してください。

アップデート:

ifおよびunlessのロジックは<target>、プロパティが設定されているかどうかを確認することです。の場合、プロパティが設定されifているときにターゲットが実行されます。のunless場合、ターゲットは、プロパティが設定されていないときに実行されます。プロパティの値ではありません。

条件のコードを確認したことはありませisreferenceんが、削除する必要があると思いますelse="false"

それでもその部分を削除しても問題が解決しない場合は、埋め込まれたGroovyまたはBeanshellスクリプトを使用するか、独自の条件を作成する必要があります。

于 2013-02-25T15:35:17.347 に答える