我将 Grails 3.3.10 应用程序迁移到 Grails 4.0.0,从 Java 8 迁移到 OpenJDK 11。经过一些工作以使测试和应用程序在我的开发环境(Windows 10 机器)上运行后,我将可执行的 war 打包在一个 docker adoptopenjdk/openjdk11:alpine
. docker 的入口点只是运行应用程序:
java <some options> -jar /app/application.war
但是,运行时的 docker 在初始化 Micronaut 时会出错:
java.util.ServiceConfigurationError: Error loading service [org.grails.databinding.converters.$DefaultConvertersConfigurationDefinitionClass]: javax/annotation/PreDestroy
at io.micronaut.core.io.service.DefaultServiceDefinition.lambda$load$0(DefaultServiceDefinition.java:71)
...
Caused by: java.lang.NoClassDefFoundError: javax/annotation/PreDestroy
...
Caused by: java.lang.ClassNotFoundException: javax.annotation.PreDestroy
我尝试添加
compile 'javax.annotation:javax.annotation-api:1.3.2'
在我的 gradle 依赖项中,没有成功。使我的应用程序运行缺少什么?
最佳答案
Java 11 不再附带一些 javax 库。
遵循https://blog.codefx.org/java/java-11-migration-guide/#Migrating-From-Java-8-To-Java-11 的指示解决了这个问题。
关于 chalice 4 : Micronaut fails with NoClassDefFoundError: javax/annotation/PreDestroy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57375819/