2016-06-27 18 views
5

JavaプロジェクトをAntからGradleに移行しています。私は最高のソリューションは、Gradleのマルチプロジェクトサポートを使用することだと思うが、私は循環依存を取り除く方法を見つけることができません。Gradleの循環依存性を解決する方法

元のプロジェクトは、このレイアウトを持つように設定した:

- project/ 
    - common/ 
    - product-a/ 
    - product-b/ 

commonproduct-a、とproduct-bの関係はトリッキーです。 commonは、構成ファイルに応じて、product-aまたはproduct-bに依存します。同様に、product-aおよびproduct-bは、構成プロパティに関係なく、commonに依存します。 product-aproduct-bは同時に構築されることはありません。

私は、迅速な解決がproject/build.gradle中でこのようなものを使用するのだろうと思った:

project(':product-a') { 
    dependencies { 
     compile project(':common') 
    } 
} 

project(':product-b') { 
    dependencies { 
     compile project(':common') 
    } 
} 

次に、私はちょうどproduct-aのために働いてまで、これが近づくための方法を得ることについて考えました。それは私にこれをもたらしました:

project(':common') { 
    dependencies { 
     compile project(':product-a') 
    } 
} 

これは、循環依存性を持つための例外をスローします。

私はcommonproduct-a/product-bによって、または多型を使用することにより期待されるクラスのインタフェースを設定することによりproduct-aproduct-bをリファクタリングと考えられてきましたが、私はそれらのいずれかで前方に移動する前に、とこれを達成するためのより良い方法がありますGradle?私はまだこの技術的な負債を取り除く準備ができていません。

答えて

5

ビルドトリッキーで円形の依存関係を削除することはできません。循環依存関係がなくなるようにモジュールをリファクタリングする必要があります。あなたのモジュール名から、そして他の情報なしで、私はあなたが "product- *"に依存する "共通"の部分を抽出し、それを新しいモジュールに入れたいと思うでしょう。

関連する問題