0

私は非常に醜いハックをしました。

2つのjarファイルを生成するモジュールAがあります。

moduleA.jar and moduleA.test.jar

module.test.jarは、同じリポジトリ内の他のプロジェクトによって使用され、他のリポジトリにそれ以上公開されることはありません。

これをmoduleAのivy.xmlに追加しました

<publications>
    <artifact name="moduleA" type="jar" ext="jar" conf="compile"/>

    <artifact name="moduleA.test" type="jar" ext="jar" conf="test"/>
</publications>

moduleBでそれをどのように消費できますか。Mavenがモジュールごとに複数のアーティファクトをサポートしていないことを理解しており、これがIVYでサポートされていることをどこかで読みました。私はそれを書いてもらうことができないようです。

moduleBのivy.xmlでこれを試しました:

<dependency org="my.org" name="moduleA" rev="SNAPSHOT" conf="compile,test->default,test" />
<dependency org="my.org" name="moduleA.test" rev="SNAPSHOT" conf="compile,test->default,test" />

しかし、「name」はアーティファクトではなくモジュールの名前であるため、これは明らかに機能しませんでした。type属性を使用する回避策がありました:moduleAで:

<artifact name="moduleA" type="test.jar" ext="jar" conf="test"/>

およびmoduleB:

<dependency org="my.org" name="moduleA" rev="SNAPSHOT" conf="compile,test->default,test" />

これは機能しましたが、非常に醜いようです。ANTで次のようなファイルを作成する必要があるため:

moduleA-SNAPSHOT.test.jar

同じモジュールの複数のアーティファクトに依存するための適切な解決策はありますか?

この質問IDは次のように異なり ます。モジュールXの複数のアーティファクトがApacheIvyの同じファイルに取得されるのを解決するにはどうすればよいですか?

4

1 に答える 1

1

モジュール A が次のようになっているとします。

<info organisation="my.org" module="moduleA" .../>

<configurations>
    <conf name="compile description="???"/>
    <conf name="test    description="???"/>
    ..
</configurations>

<publications>
    <artifact name="moduleA" type="jar" ext="jar" conf="compile"/>
    <artifact name="moduleA.test" type="jar" ext="jar" conf="test"/>
</publications>

次のモジュール B 宣言は、moduleA.jar を取得します。

<dependency org="my.org" name="moduleA" rev="latest.integration" conf="default->compile" />

次のモジュール B 宣言は、moduleA.test.jar を取得します。

<dependency org="my.org" name="moduleA" rev="latest.integration" conf="default->test" />

それを機能させるのは構成マッピングです。

default->compile
^          ^
|          |
Local configuration
           |
           Remote configuration

ローカル構成は「デフォルト」である必要はありません。明らかに、モジュール B も構成を使用する場合、それらのいずれかを使用できます。

于 2012-07-26T19:23:31.320 に答える