定期的に"type [blah] cannot be resolved. It is indirectly referenced from required .class files"
エラーが発生し、助けを求めています。
私はこのサイトとウェブを検索しましたが、クラスパスにクラスを追加することで、 多くの 似たような質問がすべて解決されるようです。 しかし、この場合、それらはすでにクラスパスにあると確信しています。
非常に大規模なメタプロジェクトから抜粋した状況を次に示します。ProjectOne と ProjectTwo という 2 つの Eclipse プロジェクトがあります。
どちらのプロジェクトもビルド サーバーによって Ivy リポジトリに公開され、ProjectTwo の ivy.xml は ProjectOne のそのバージョンを参照します。ただし、アイビーの「ワークスペースで依存関係を解決する」設定をオンのままにして、両方のプロジェクトで作業し、公開されたクラスではなく変更されたクラスに解決できるようにします。
ProjectOne は私のワークスペースでコンパイルされます (ProjectTwo と同様に、(時折) 「必要な .class ファイルから間接的に参照される」問題を除いて)。
構造は基本的に次のようになります。
// ProjectOne
class Enum { **// I now suspect this name is the problem**
public static class EnumObjectCache {
}
// ProjectTwo
class Bar { **// Occasionally gets error about Enum$EnumObjectcache being unresolvable**
}
これは、次の事実にもかかわらずです。
- これは Eclipse にのみ影響します。実際のコンパイラはこれをすべて問題なく処理します
- ProjectTwo の ivy.xml ファイルには、ProjectOne への推移的な依存関係が含まれています。
- ProjectOne がワークスペースに存在し、正常にコンパイルされます。
- 私は常に「ワークスペースの依存関係を解決する」をオンにしています。
- 解決方法に関係なく、クラス Enum (および EnumObjectCache) は 1 年以上変更されていません。
- 実験として、ProjectOne を ProjectTwo のクラスパスに直接追加してみました (必要なプロジェクトとして定義することにより)。変化なし。
- これをさらに面白くするために、この問題は常に発生するわけではなく、この非常に大きなコードベースのいくつかのクラスでのみ発生します。ああ、それが起こるとき、それは常にEnum$EnumObjectCache にあります。
- チームのすべての開発者に一度に起こるわけではありません。
問題が発生すると、複数回の「クリーン」とEclipseの再起動で持続し、IVYが再解決します。(私は Ivy clean-all-caches を行っていませんでしたが)。
10. ProjectOne から不要な Enum のインポートを導入することで、問題を「修正」できます。
注:これまでキャッシュのクリーニングを試みたことがありませんでした.これは非常に時間がかかるためです(リモートキャッシュは大西洋横断であり、非常に大規模なプロジェクトです).
ただし、すべてのキャッシュを消去し、再解決し、再構築した後も、同じ問題が発生します。