Java 11 升级缺少 javax.annotation.security

Posted

技术标签:

【中文标题】Java 11 升级缺少 javax.annotation.security【英文标题】:Java 11 upgrade missing javax.annotation.security 【发布时间】:2019-04-02 10:38:37 【问题描述】:

有一个 spring boot 应用程序,我正在升级到 java 11。war 文件部署在以 open-jdk-11 启动的最新 tomcat 9 中。

代码仍然在 Java 8 中编译。首先让它在 Java 11 上可运行,然后从模块 hazzle 开始...

所以我添加了compile 'javax.annotation:javax.annotation-api:1.3.2' 作为依赖,但从 tomcat 产量开始(启动可运行的 jar 给出相同的结果):

Caused by: java.lang.IllegalAccessError: class org.apache.catalina.startup.WebAnnotationSet (in unnamed module @0x51d8cbdd) cannot access class javax.annotation.security.DeclareRoles (in module java.annotation) because module java.annotation does not export javax.annotation.security to unnamed module @0x51d8cbdd
at org.apache.catalina.startup.WebAnnotationSet.loadClassAnnotation(WebAnnotationSet.java:258) ~[tomcat-embed-core-8.5.34.jar!/:8.5.34]
        at org.apache.catalina.startup.WebAnnotationSet.loadApplicationListenerAnnotations(WebAnnotationSet.java:88) ~[tomcat-embed-core-8.5.34.jar!/:8.5.34]
at org.apache.catalina.startup.WebAnnotationSet.loadApplicationAnnotations(WebAnnotationSet.java:67) ~[tomcat-embed-core-8.5.34.jar!/:8.5.34]
        at org.apache.catalina.startup.Tomcat$FixContextListener.lifecycleEvent(Tomcat.java:973) ~[tomcat-embed-core-8.5.34.jar!/:8.5.34]
at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:94) ~[tomcat-embed-core-8.5.34.jar!/:8.5.34]
        at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5154) ~[tomcat-embed-core-8.5.34.jar!/:8.5.34]
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) ~[tomcat-embed-core-8.5.34.jar!/:8.5.34]
        at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1420) ~[tomcat-embed-core-8.5.34.jar!/:8.5.34]
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1410) ~[tomcat-embed-core-8.5.34.jar!/:8.5.34]
        at java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[?:?]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[?:?]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[?:?]
        at java.lang.Thread.run(Thread.java:834) ~[?:?]

【问题讨论】:

没有官方支持的支持 Java11 的 Spring Boot 版本。 【参考方案1】:

你运行的是什么版本的 Spring Boot? Java 11 支持从 2.1 开始 https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.1-Release-Notes

Java 11 支持

Spring Boot 2.1 仍然与 Java 8 兼容,但现在也支持 Java 11。我们配置了持续集成,以针对最新的 Java 11 版本构建和测试 Spring Boot。

【讨论】:

以上是关于Java 11 升级缺少 javax.annotation.security的主要内容,如果未能解决你的问题,请参考以下文章

OpenCV4 中似乎缺少 Imgproc.undistort()

[Route: ] - Laravel 7 缺少必需的参数

Apache Ignite 2.11.0 :: Maven 存储库中缺少 ignite-spring-tx-ext

升级到 Xcode 4 后出现缺少文件警告

将 Maven 插件升级到 Java 11

升级到 Xcode 3.2 后缺少框架