当我使用Tomcat 9和Java10停止SpringBoot Web应用程序时,非法的反射访问

时间:2018-09-05 12:52:24

标签: java spring-boot java-10 java-module tomcat9

我正在尝试使用Spring Boot 2开发Java 10,但遇到一些问题。

该应用程序是一个基于Spring Boot 2的简单Web应用程序。应用程序启动正常,但是当我停止它时,出现以下警告:

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

启动应用程序

有人知道我为什么收到此消息吗?

1 个答案:

答案 0 :(得分:5)

要使这些警告静音,您将在启动脚本中需要以下选项:

--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 startup script中所见。

警告的解决方法是not likely to be addressed anytime soon

  
    

有计划在将来的版本中解决这些问题吗?

  
     

暂时没有。

     

我们将尽一切可能保持明确的清除。一旦它   被永久阻止,我们可能不得不依靠以下事实:   有问题的地图使用WeakReference并等待GC清除   参考。这将使追踪真正的内存泄漏更加困难   所以我们必须看看我们能否说服JRE团队提供一些   当/到达这一点时,将提供一种替代API。