web-dev-qa-db-ja.com

プロジェクトxxxのビルドパスでサイクルが検出されました-ビルドパスの問題

私は、mavenとEclipseを使用して、プロジェクトをOSGIバンドルに変換するプロセスを進めています。 Mavenは問題なくビルドします。Eclipse内で上記のエラーが表示されるだけです。どのプロジェクトがこれを引き起こしているかをどのように見つけることができますか?特別な意見や何かがありますか?これはどのように起こりますか、私はmavenが循環依存関係も検出できると期待していますか?

更新

OK、何かを見つけました here および here

これは、各エクスポートに対してインポートも行うfelix maven-bundle-pluginによって引き起こされる可能性がありますか?

46
Mauli

Eclipseツールで循環依存関係を「警告」としてマークし、「ビルドパスでサイクルが検出されました」エラーを回避します。

Eclipseで次の場所に移動します。

Windows->環境設定-> Java->コンパイラ->ビルド->循環依存関係

88
user2582855

ワークスペースに複数のプロジェクトがある場合、プロジェクト間ではなくプロジェクト間で参照を設定する必要があります。 P1がP2を参照する場合、P2はP3を参照し、P3はP1を参照します。それはサイクルを引き起こします。

解決策は、ワークスペース内のプロジェクト間の参照の図を描くことです。各プロジェクトのJava Build Pathをチェックして、[プロジェクト]ウィンドウのタブを確認します。上記の例では、P3がP1を参照するなど、メインプロジェクトを参照しているプロジェクトを取り出します。 。

詳細な操作は、RAD =OR Eclipse、プロジェクトを右クリックしてプロパティオプションを選択し、プロパティの新しいウィンドウを表示します。 P3。[Javaビルドパス]セクションをクリックし、[プロジェクト]オプションタブを選択します。フィールドでP3がP1を参照していることがわかります。P1参照を選択し、ウィンドウの右側にある[削除]ボタンをクリックします。次に、[OK]をクリックします。IDEは、パスの自動リセットを開始します。

できた.

ダイアグラム内の各プロジェクトへの適切な参照が得られるまで、各プロジェクトで誤って参照されている参照をすべて見つけてください。がんばろう!

12
Jack

あるプロジェクトが別のプロジェクトを参照しているため、これがありました。

  1. プロジェクトAからプロジェクトBへの参照を削除する
  2. 実行してみてください、それは壊れます
  3. 参照を再追加
  4. クリーン/クリーンおよびビルド
  5. ビジネスに戻る
7

簡単に言えば、サイクルは、バンドルAがバンドルAに依存するバンドルBに依存するときです。これがソースコードである場合、1つのパスでバンドルを個別に構築する方法はありません。

この問題はEclipseでのみ表示されるため、ソースコードの循環依存関係ではなく、バイナリ循環依存関係である可能性があります。

Eclipseの最近のバージョンではバイナリサイクルがサポートされています。 Eclipsesourceブログ

サイクルがコード内にある場合、循環依存関係を削除するために、コードの一部を3番目のバンドルに分割してコードをリファクタリングすることをお勧めします。

また、サイクルを導入するのは非常に簡単なので、OSGiフラグメント(ユニットテストの一般的なパターン)を使用しているかどうかに注意してください。

Eclipseのマニフェストエディターには、[依存関係]タブにサイクルを検索する機能があります([依存関係分析]をクリックする必要があります)が、Eclipseに大きな赤いXが表示されていてもサイクルが表示されるサイクル!

4
SteveD

問題

辞書インターフェイスの2つの異なる実装をテストする古いプロジェクトがあります。 1つは並べ替えられていないArrayListで、もう1つはHashTableです。 2つの実装はタイミングが取られているため、比較を行うことができます。コマンドライン引数からどのデータ構造を選択できます。今..私はツリー構造である別のデータ構造を持っています。 HashTableと比較するために、その時間をテストしたいと思います。だから..新しいdataStructureプロジェクトでは、Dictionaryインターフェースを実装する必要があります。辞書プロジェクトでは、新しいdataStructureプロジェクトに固有のコードを追加できる必要があります。循環依存があります。これは、EclipseがプロジェクトAに依存しているプロジェクトを見つけようとすると、プロジェクトBを見つけることを意味します。依存プロジェクトのサブ依存関係を見つける必要がある場合、Aを見つけます。ツリーはなく、サイクルのあるグラフがあります。

溶液

依存プロジェクト([プロジェクト]タブ)を入力する代わりに、ビルドパスを構成するときに、[ライブラリ]タブに移動します。 [クラスフォルダーの追加...]ボタン(参照プロジェクトがワークスペースにあると仮定)をクリックし、クラスフォルダーを選択します。私のものは\ targetです。これをライブラリフォルダーとして選択します。プロジェクトAでこれを行い、プロジェクトBを参照します。プロジェクトBでこれを行い、プロジェクトAを参照します。\ target\projectNameFolderを参照しないでください。一致するインポートがないことを確認してください。再構築を強制するために、依存関係を削除してからリセットする必要はなくなりました。

プロジェクト参照の代わりにクラスライブラリを使用します。

3
Ryan Zoerner

時々警告としてマークする

Windows->環境設定-> Java->コンパイラ->ビルド->循環依存関係

eclipseは、コンパイルされていない依存関係に別のプロジェクトがあるプロジェクトをコンパイルしないため、問題は解決しません。

したがって、この問題を解決するには、Eclipseに可能なすべてのクラスをコンパイルするように強制することができます。

これを作成するには:

  1. 選択解除

Windows->環境設定-> Java->コンパイラ->ビルド->ビルドパスエラーが発生したときにビルドを中止

  1. すべてのプロジェクトをクリーンアップして再構築する

プロジェクト->クリーン...

  1. 再選択:

Windows->環境設定-> Java->コンパイラ->ビルド->ビルドパスエラーが発生したときにビルドを中止

自動ビルドが選択されている場合、コードを変更するたびにこれを行う必要はありません

2
Sambuccid

私は少し前に同様の問題に直面し、Javaプロジェクトの完全なビルドパス依存ツリーを示すEclipseプラグインを書くことにしました(グラフィックモードではない-結果はファイルに書き込まれます)。プラグインのソースはこちら http://github.com/PetrGlad/dependency-tree

1
Petr Gladkikh

Require-Bundle形式の依存関係管理(Mavenのpom依存関係に最も類似)と同様に、Import-Package依存関係を持つこともできます。 Import-Packageで循環依存関係を導入するのは、Require-BundleよりもYMMVの方がはるかに簡単です。

また、Eclipseプロジェクトには、他のどのプロジェクトに依存しているかを示す「プロジェクト参照」があります。 Eclipseはこれを高いレベルで使用して、どのプロジェクトをどの順序でビルドするかを決定します。そのため、Manifest.MFがすべてを正しくリストする可能性がありますが、プロジェクトの参照は不正確です。プロジェクトを右クリックして、プロパティに移動します。依存しているプロジェクトが表示されます。あなたがテキストのような人なら、.projectファイルを開いて、そこに依存するファイルを確認してください-代わりに、プロジェクトの循環リンクがそのレベルで定義されている可能性が高いですBAから反転しましたが、.project参照を更新しませんでした)。

1
AlBlue

Maven willサイクルが検出されるとビルドが失敗します。依存関係はツリーでなければならないためです。

Manifest.mfには、pom.xmlで定義されている宣言よりも追加の宣言がある場合があります。余分な宣言があると、Mavenには見えないサイクルが発生する可能性があります。

1
Rich Seller

参照を削除してから追加し直してください。Eclipseが奇妙な動作をすることがあります。そのエラーを修正するまで、更新しない限り更新できないためです。したがって、すべての依存関係プロジェクトを削除し、クリーンアップしてビルドし直してください。

0
sjchoudary

Eclipseを再起動するだけで私のプロジェクトの問題が修正されました

0
user3235783

これは、JAR形式で互いに含まれる複数のプロジェクトがある場合に発生する可能性があります。私がしたことは、すべてのプロジェクトについて、ビルドパス上のすべてのライブラリとプロジェクトの依存関係を削除することでした。次に、プロジェクトタブにプロジェクトの依存関係を1つずつ追加しましたが、必要なものだけを追加しました。これは、自分自身が参照しているプロジェクト、またはこの自己参照の問題で他のプロジェクトを参照している別のプロジェクトを追加できるためです。

これで問題が解決しました。

0
Camilo

私もこの問題を抱えています。ワークスペースの解像度を無効にし、すべてが正しかったのです。 ここに画像の説明を入力してください

0
Rain

今日、この同じ問題に直面しました。エラーが発生しました。間違って、循環依存を追加しました。 AはBに依存していました。私の場合、誤って、BをAに依存しているとして追加しました。AをBに依存しているとして追加しました。それは愚かな間違いでした。

0
MansoorShaikh

これらの問題が発生したとき、それは常にManifest.mfで表現された依存関係の真のサイクルでした

そのため、問題のプロジェクトのマニフェストを開き、[依存関係]タブで[必須プラグイン]エントリを確認します。その後、そこから次のプロジェクトに進み、最終的に繰り返してサイクルが明確になります。

[依存関係]タブの右下隅にある[依存関係分析]リンクを使用すると、このタスクを多少簡略化できます。これには、サイクルの検出とナビゲーションの依存性があります。

また、Mavenがより寛容である理由もわかりませんが、

0
djna

「Mark Circular Dependencies」を使用するとコードをコンパイルできますが、環境が遅くなり、将来の問題が発生する可能性があります。

ある時点で、Eclipseがビルドパス上の指示を失ったため、それが起こっています。

1-プロジェクトとワークスペースからの参照を削除します。 2-再度インポートします。 3-参照を確認します。

それが最善の解決策です。

0
Machado