Grails 4: Micronaut fails with NoClassDefFoundError: javax/annotation/PreDestroy

Grails 4: Micronaut fails with NoClassDefFoundError: javax/annotation/PreDestroy

我将 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 when 运行 然而在初始化Micronaut时报错:

java.util.ServiceConfigurationError: Error loading service [org.grails.databinding.converters.$DefaultConvertersConfigurationDefinitionClass]: javax/annotation/PreDestroy

at io.micronaut.core.io.service.DefaultServiceDefinition.lambda$load[=13=](DefaultServiceDefinition.java:71)

...

Caused by: java.lang.NoClassDefFoundError: javax/annotation/PreDestroy

...

Caused by: java.lang.ClassNotFoundException: javax.annotation.PreDestroy

我尝试在我的 gradle 依赖项中添加 compile 'javax.annotation:javax.annotation-api:1.3.2',但没有成功。

我的申请缺少什么 运行?

Java 11 不再附带某些 javax 库。

按照 https://blog.codefx.org/java/java-11-migration-guide/#Migrating-From-Java-8-To-Java-11 的说明解决了问题。