web-dev-qa-db-ja.com

org.springframework.cglib.core.ReflectUtils $ 1による不正な反射アクセス

私のJDK 9 + 181 Spring Boot 2.0.0.BUILD-SNAPSHOT CLIアプリケーションは、起動時に次の警告を表示します。

WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by org.springframework.cglib.core.ReflectUtils$1 (jar:file:/home/jan/src/fm-cli/target/fm-cli-0.1.0-SNAPSHOT.jar!/BOOT-INF/lib/spring-core-5.0.0.RELEASE.jar!/) to method Java.lang.ClassLoader.defineClass(Java.lang.String,byte[],int,int,Java.security.ProtectionDomain)
WARNING: Please consider reporting this to the maintainers of org.springframework.cglib.core.ReflectUtils$1

これはコンソールアプリケーションなので、この警告を無効にする必要があります。どうすればよいですか?

注:この質問は、Springによってトリガーされるこの警告を無効にする方法に関する特定の質問です。 JDK9:不正なリフレクティブアクセス操作が発生しました。org.python.core.PySystemState の複製ではありません。これは、異なるライブラリで同様の症状を処理します。

38
Jan Nielsen

JDK 9+では、次のオプションをJVMに追加して、SpringによるCGLIBの使用からの警告を無効にします。

--add-opens Java.base/Java.lang=ALL-UNNAMED

例えば:

Java --add-opens Java.base/Java.lang=ALL-UNNAMED -jar target/*.jar

報告する必要はありません。 既知のSpringバグ です。

これは、新しいJDK 9モジュールシステムが(近い)将来いつか許可されない不正アクセスを検出したために発生します。 こちらのJDK 9モジュールシステム の詳細をご覧ください。

更新

この問題の修正は、JDK 9以降とSpring 5.1以降で利用可能です。

53
Jan Nielsen

上記のJan Nielsenの回答に加えて、Springコア5.0.7に依存するIntellijとSpring Boot 2.0.3を使用している場合、まだスタックし、修正されません。

私への道は二つのことを必要としていました:

  • Janが言及した-add-opensを実行/デバッグ構成に追加します。構成を編集して、[環境]/VMオプションの下を見てください。これにより、「違法アクセスメッセージ」の一部が抑制されます。

  • また、jaxb-apiライブラリに依存関係を追加する必要がありました。 この春のgithubの問題 に関するValentinBossiのコメントからヒントを得ました。

4
Coffee_fan

Springイニシャライザーを使用する場合は、Spring Bootの最新バージョンを使用してください。 Spring core 5.1以降が自動的に取得され、プロジェクトを実行してもエラーは表示されません。

したがって、JVM構成の編集について心配する必要はありません。

3
Onome Sotu

これらの警告の後、アプリがまだ動作しない場合は、pom.xmlにこの依存関係を追加します

<dependency>
    <groupId>javax.xml.bind</groupId>
    <artifactId>jaxb-api</artifactId>
    <version>2.3.0</version>
</dependency>

これは私を助けました!!

0