私の新しいプロジェクトのJDKバージョンを7u45から8u20に切り替えると、奇妙なエラーが発生しました。クラスの最初の無害なLogManager宣言は、次のエラーで拒否されています。
タイプJava.lang.reflect.AnnotatedElementを解決できません。必要な.classファイルから間接的に参照されている
これはコードです:
public class Class1 {
private static Logger log = LogManager.getLogger(Class1.class);
...
Eclipseはビルドパスを構成するように提案していますが、そのエラーの根本的な問題がわからないので、何を構成すべきかわかりません。
JDKをバージョン7で使用すると、すべてが正常に動作します。
JDK 8とIDE(または他のコード処理ツール/フレームワーク)をEclipseなどの独自のコンパイラで使用する場合、たとえJava 8をサポートするバージョンにツールを更新する必要があります新しいJava 8機能を使用していない。
その理由は、これらのクラスを参照するソフトウェアをコンパイルするために、コンパイラーがJREの新しいクラスファイルをロードできる必要があるためです。
クラスファイルの新しいバージョン番号を無視する場合は、古いコンパイラーを使用しないこともあります。ただし、一部のタイプでは、古いクラスファイルパーサーが新しい機能を使用するため、特に AnnotatedElement
が混乱します。これには、default
メソッドと Map.Entry
、interface
にstatic
メソッドが追加されました。
「"classname"と言ったときに、Eclipseはクラスファイルが見つからなかった参照と読み取れなかったクラスファイルを区別しないようです解決できません。」.
同じことが、組み込みコンパイラとしてECJを使用するすべてのツールとフレームワークに適用されます。
解決策1:
ソースレベルを変更してみてください。
解決策2:
Eclipse内から実行しているTomcatでこれが発生した場合( 質問 が重複して閉じられ、ここにリダイレクトされます)、[設定]→[サーバー]→[ランタイム環境]→Tomcatバージョン→編集…選択したJREがTomcatバージョンと一致することを確認します。 (インストールする必要があるかもしれません。)
JRE 8からJRE 7に変更してEclipseを再起動すると、問題なく動作します。
JRE 8でEclipse Heliosを使用していて、ソフトウェアを更新すると問題が解決しました。
今私はEclipse Marsを使用しており、問題なく動作します-> https://Eclipse.org/downloads/