Docker构建Quarkus 2.2.1原生可执行文件报Annotated类需为final错误问询
报错原因
这个报错是GraalVM版本与Quarkus 2.2.1.Final自带的amazon-lambda-http扩展不兼容导致的:GraalVM 21.3及以上版本新增了校验规则,要求@Substitute注解修饰的替换类必须声明为final,而Quarkus 2.2.1.Final内置的io.quarkus.amazon.lambda.http.graal.LambdaContainerHandlerSubstitution类未添加final修饰,触发了校验错误。
解决方案
- 方案1(最推荐):升级Quarkus版本
直接将项目pom.xml中的Quarkus版本升级到2.7.7.Final及以上的2.x稳定版,官方在后续版本中已经修复了该类的final修饰问题,无需修改其他配置即可正常构建。 - 方案2(不升级Quarkus版本的临时解决):指定兼容的GraalVM构建镜像
在原构建命令中新增参数指定Quarkus原生构建使用21.2.x版本的GraalVM镜像,该版本没有新增的final校验规则,适配Quarkus 2.2.1.Final,完整命令如下:mvn clean package "-Pnative" "-Dquarkus.native.container-build=true" "-Dquarkus.native.container-runtime=docker" "-Dquarkus.native.builder-image=quay.io/quarkus/ubi-quarkus-native-image:21.2.0-java11" - 方案3:移除无关依赖
如果你的项目没有用到AWS Lambda相关能力,直接从pom.xml中删除quarkus-amazon-lambda-http依赖即可,不会影响其他功能的原生构建。
内容的提问来源于stack exchange,提问作者itsamitksingh
相关产品推荐
相关产品推荐

