2012-07-04 19 views
9

モジュールAとBの2つがあります。実際のBはAへのプラグインです。
Bはコンパイル時にAに依存します。 Aさんのpom.xmlに、私は、次の依存関係を追加するようMavenランタイムスコープと循環依存性

<dependency> 
     <groupId>my_group</groupId> 
     <artifactId>my_Plugin</artifactId> 
     <version>${project.version}</version> 
     <scope>runtime</scope> 
    </dependency> 

Mavenのプロセス

pom.xmlは、循環依存のエラーで失敗し、私はクラスパスにBを追加するランタイムでB. には依存しませ

[ERROR] The projects in the reactor contain a cyclic reference: Edge between 'Vertex{label='A'}' and 'Vertex{label='B'}' introduces to cycle in the graph B-->A-->B -> [Help 1] 

[ERROR]

ランタイム依存関係の影響が時間をコンパイルなぜ?

+1

このようなプロジェクトのためにビルドを整理するには、良いアプローチがあります。別のモジュール(C)に共有されているコードをリファクタリングすると、プロジェクトBはコンパイル時にAに依存する必要がなくなります.AとBはどちらもCに依存することができます。AをBに依存させることは問題になりません実行時にこれを考える良い方法は、ライブラリ(共有可能なコードの集まり)を書くことと、アセンブルされたライブラリのコレクションであるアプリケーションを考えることです。アプリケーションプロジェクトには、実際にコードを入れる必要はありません。 – Conan

答えて

1

Conanが提案したように、可能であれば、共通のコードを別のモジュールに抽出して循環性を解決してください。通常、そのような場合、共通のインタフェースとコアクラスを、循環依存を引き起こす両方のモジュールによって拡張された別のモジュールに抽出します。最初は循環状態にあったモジュールの直接の依存関係を削除します。コードをモジュール化すると、コードをリファクタリングして簡単に再利用できるようになります。

+1

Aのコードは私の責任ではないので、私はそれを分けることができません。 – user1500951

+0

あなたやあなたの会社が考案したコードなら、これが行く方法です。 あなたの事例とあなたが私達に語ったことに基づいて、他の明らかな解決策はありません。 – carlspring