I migrated a Grails 3.3.10 application to Grails 4.0.0, moving from Java 8 to OpenJDK 11. After some work to make the tests and application run on my development environment ( a windows 10 machine ), I packaged my executable war in a docker adoptopenjdk/openjdk11:alpine
. The docker's entrypoint just runs the app:
java <some options> -jar /app/application.war
The docker when run however gives an error when initializing 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
I tried to add compile 'javax.annotation:javax.annotation-api:1.3.2'
in my gradle dependencies, without success.
What's missing to make my application run?
Java 11 no longer ships with some of the javax libraries.
Following the instruction from https://blog.codefx.org/java/java-11-migration-guide/#Migrating-From-Java-8-To-Java-11 solved the issue.