web-dev-qa-db-ja.com

Tomcat 9およびJava 10でSpring Boot Webアプリケーションを停止すると、不正な反射アクセスが発生します

私はJava 10 Spring Boot 2での開発を試みていますが、いくつかの問題が発生します。

アプリケーションは、Spring Boot 2に基づいた単純なwebappです。アプリケーションの起動は問題ありませんが、停止すると次の警告が表示されます。

WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by org.Apache.catalina.loader.WebappClassLoaderBase (file:/C:/Users/CS/.m2/repository/org/Apache/Tomcat/embed/Tomcat-embed-core/9.0.11/Tomcat-embed-core-9.0.11.jar) to field Java.io.ObjectStreamClass$Caches.localDescs
WARNING: Please consider reporting this to the maintainers of org.Apache.catalina.loader.WebappClassLoaderBase
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release

ご覧のとおり、埋め込みTomcatサーバーをバージョン8から9.0.11に切り替えて、Javaモジュールシステムに準拠しています。アプリケーションはオプション--add-opens Java.base/Java.lang=ALL-UNNAMEDで起動します。

このメッセージが表示される理由を誰か知っていますか?

11
ChriX

これらの警告を黙らせるには、起動スクリプトに次のオプションが必要です。

--add-opens=Java.base/Java.lang=ALL-UNNAMED
--add-opens=Java.base/Java.io=ALL-UNNAMED
--add-opens=Java.rmi/Sun.rmi.transport=ALL-UNNAMED

Tomcat 9起動スクリプト でわかるように。

警告の修正は いつでもすぐに対処される可能性は低い

将来のリリースでこれらに対処する計画はありますか?

現時点ではない。

可能な限り、明示的なクリアを維持します。永久にブロックされたら、問題のマップがWeakReferenceを使用し、GCが参照をクリアするのを待つという事実におそらく依存する必要があります。これにより、本物のメモリリークの追跡が困難になるため、その時点に到達した場合にJREチームに何らかの代替APIを提供するよう説得できるかどうかを確認する必要があります。

6
Jan Nielsen