0

モジュールのjarアーティファクトとは別にモジュールの依存関係を公開したいと思います。

<?xml version="1.0" encoding="UTF-8"?>
<ivy-module version="2.0">
  <info organisation="com.mycompany" module="platform" />
  <configurations defaultconfmapping="release->*;compile->*" defaultconf="release">
    <conf name="release" />
    <conf name="compile" extends="release" />
  </configurations>
  <publications>
    <artifact name="platform-api" type="jar" ext="jar" />
  </publications>
  <dependencies>
    <dependency org="com.google.inject" name="guice" rev="3.0" />
    <dependency org="org.slf4j" name="slf4j-api" rev="1.6.6" />

    <dependency org="com.google.guava" name="guava" rev="13.0-rc1" conf="compile" />
    <dependency org="log4j" name="log4j" rev="1.2.17" conf="compile" />
    <dependency org="org.slf4j" name="slf4j-log4j12" rev="1.6.6" conf="compile" />
  </dependencies>
</ivy-module>

上記の構成では、platform-api.jarを使用せずに、guiceとslf4j-apijarのみを含むアーティファクトが必要です。私の現在の解決策は、依存モジュールに2つの依存関係を定義することです。1つは推移的で、もう1つはそうではありません。

<dependency org="com.mycompany" name="platform" rev="1.0-SNAPSHOT" conf="myconf->release">
  <exclude org="com.mycompany" />
</dependency>
<dependency org="com.mycompany" name="platform" rev="1.0-SNAPSHOT" transitive="false" conf="myotherconf->release" />

しかし、この解決策は、3番目のモジュールがこれらのモジュールの両方に依存している場合に問題を引き起こし、それは単に醜いです。

4

2 に答える 2

5

代わりにこれを試してください:

<ivy-module version="2.0">
  <info organisation="com.mycompany" module="platform" />
  <configurations>
    <conf name="default" description="runtime dependencies and master artifact can be used with this conf" extends="runtime,master"/>
    <conf name="master"  description="contains only the artifact published by this module itself, with no transitive dependencies"/>
    <conf name="compile" description="Compile dependencies"/>
    <conf name="runtime" description="Runtime dependencies, includes compile dependencies" extends="compile"/>
  </configurations>
  <publications>
    <artifact name="platform-api" type="jar" ext="jar" conf="master"/>
  </publications>
  <dependencies>
    <!-- Compile dependencies -->
    <dependency org="com.google.inject" name="guice" rev="3.0" conf="compile->default"/>
    <dependency org="org.slf4j" name="slf4j-api" rev="1.6.6" conf="compile->default"/>
    <dependency org="com.google.guava" name="guava" rev="13.0-rc1" conf="compile->default" />

    <!-- Runtime dependencies -->
    <dependency org="log4j" name="log4j" rev="1.2.17" conf="runtime->default" />
    <dependency org="org.slf4j" name="slf4j-log4j12" rev="1.6.6" conf="runtime->default" />
  </dependencies>
</ivy-module>

ノート:

  • より大きなjarセットを作成するために使用される、構成の「extends」属性に注意してください。
  • デフォルトの設定マッピングを削除し、各依存関係にconfマッピングを明示的に設定することをお勧めします。私の意見では、より単純で最終的に理解しやすい(魔法が少ない)

モジュールに公開されたアーティファクトの個別の構成があり、実行時の依存関係があるため、次のように単一の依存関係宣言を使用して、これらを個別のローカル構成にマップできます。

<dependency org="com.mycompany" name="platform" rev="1.0-SNAPSHOT" conf="myconf->runtime;myotherconf->master" />
于 2012-07-30T23:24:42.570 に答える
0

あなたが探しているのは、実際には同じ依存関係を共有する2つのプロジェクトだと思います。(偶然にも、そのうちの1つがもう1つを使用しています)。

extends http://ant.apache.org/ivy/history/latest-milestone/ivyfile/extends.htmlを使用することを検討しましたか?

extendType="dependencies".

次に、プラットフォームでparent-ivy.xmlを依存関係で拡張します。そして、同じ依存関係に対して同じparent-ivy.xmlファイルを拡張する他のプロジェクト。

これで十分かどうかはわかりません。ここでは構成が役割を果たすためです。しかし、多分それは始まりです。

于 2012-07-30T21:54:39.780 に答える