web-dev-qa-db-ja.com

Java 8(Java.lang.reflect.AnnotatedElementを解決できない)でLogManager(l4j2)を使用するとエラーが発生する

私の新しいプロジェクトのJDKバージョンを7u45から8u20に切り替えると、奇妙なエラーが発生しました。クラスの最初の無害なLogManager宣言は、次のエラーで拒否されています。

タイプJava.lang.reflect.AnnotatedElementを解決できません。必要な.classファイルから間接的に参照されている

これはコードです:

public class Class1 {   
    private static Logger log = LogManager.getLogger(Class1.class); 
    ...

Eclipseはビルドパスを構成するように提案していますが、そのエラーの根本的な問題がわからないので、何を構成すべきかわかりません。

JDKをバージョン7で使用すると、すべてが正常に動作します。

14
Corsair

JDK 8とIDE(または他のコード処理ツール/フレームワーク)をEclipseなどの独自のコンパイラで使用する場合、たとえJava 8をサポートするバージョンにツールを更新する必要があります新しいJava 8機能を使用していない。

その理由は、これらのクラスを参照するソフトウェアをコンパイルするために、コンパイラーがJREの新しいクラスファイルをロードできる必要があるためです。

クラスファイルの新しいバージョン番号を無視する場合は、古いコンパイラーを使用しないこともあります。ただし、一部のタイプでは、古いクラスファイルパーサーが新しい機能を使用するため、特に AnnotatedElement が混乱します。これには、defaultメソッドと Map.Entryinterfacestaticメソッドが追加されました。

"classname"と言ったときに、Eclipseはクラスファイルが見つからなかった参照と読み取れなかったクラスファイルを区別しないようです解決できません。」.

同じことが、組み込みコンパイラとしてECJを使用するすべてのツールとフレームワークに適用されます。

27
Holger

解決策1:

ソースレベルを変更してみてください。

  1. Project> Preferences> Java Compiler。
  2. プロジェクト固有の設定を有効にする
  3. コンパイラー準拠レベルを1.4以下に設定します。
  4. 再起動

解決策2:

  1. 新しいワークスペースを作成します。
  2. プロジェクトファイルを新しいワークスペースにコピーします。
  3. プロジェクトをEclipseにインポートして再ビルドします。

Eclipse内から実行しているTomcatでこれが発生した場合( 質問 が重複して閉じられ、ここにリダイレクトされます)、[設定]→[サーバー]→[ランタイム環境]→Tomcatバージョン→編集…選択したJREがTomcatバージョンと一致することを確認します。 (インストールする必要があるかもしれません。)

1
Matthias Ronge

JRE 8からJRE 7に変更してEclipseを再起動すると、問題なく動作します。

0
Duong

JRE 8でEclipse Heliosを使用していて、ソフトウェアを更新すると問題が解決しました。

今私はEclipse Marsを使用しており、問題なく動作します-> https://Eclipse.org/downloads/

0
Jessica