Cloud Native Buildpacks适配JDK21:设置方法与构建包查询
问题背景
执行pack builder suggest命令得到以下构建器列表:
Google: gcr.io/buildpacks/builder:v1 Heroku: heroku/builder:20 Heroku: heroku/builder:22 Paketo Buildpacks: paketobuildpacks/builder-jammy-base Paketo Buildpacks: paketobuildpacks/builder-jammy-buildpackless-static Paketo Buildpacks: paketobuildpacks/builder-jammy-full Paketo Buildpacks: paketobuildpacks/builder-jammy-tiny
测试Heroku的2个构建器、Google构建器及jammy-base构建器时,出现编译错误:
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.11.0:compile (default-compile) on project hubjet: Fatal error compiling: error: release version 21 not supported -> [Help 1] [ERROR] [ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch. [ERROR] Re-run Maven using the -X switch to enable full debug logging. [ERROR] [ERROR] For more information about the errors and possible solutions, please read the following articles: [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException
推测这些构建包默认不支持JDK 21,尝试执行pack build test-img --builder paketobuildpacks/builder-jammy-buildpackless-static --buildpack paketo-buildpacks/java仍未解决问题,需解答两个疑问:
- 如何设置构建包使用JDK 21版本?
- 在哪里可以查看所有可用的Paketo JDK构建包(即
--buildpack命令可用的构建包名称)?
解决方法
1. 指定Paketo构建包使用JDK 21
Paketo Java构建包支持通过环境变量指定JDK版本,构建时添加BP_JVM_VERSION变量即可指定JDK 21:
pack build test-img \ --builder paketobuildpacks/builder-jammy-buildpackless-static \ --buildpack paketo-buildpacks/java \ --env BP_JVM_VERSION=21
如果是Maven项目,需同步确保pom.xml中maven-compiler-plugin的版本配置与指定JDK版本一致,示例配置:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.11.0</version> <configuration> <release>21</release> </configuration> </plugin>
2. 查看可用的Paketo JDK构建包
有两种方式获取可用的Paketo Java相关构建包:
- 执行
pack buildpack suggest命令,该命令会列出官方维护的所有构建包,其中包含各类Java构建包; - 官方维护的Java相关构建包均在
paketo-buildpacks命名空间下,常见的有:paketo-buildpacks/java:通用Java构建包,包含JDK、构建工具及运行时支持paketo-buildpacks/jdk:仅提供JDK环境的轻量构建包paketo-buildpacks/maven:专门处理Maven构建流程的构建包paketo-buildpacks/gradle:专门处理Gradle构建流程的构建包
内容的提问来源于stack exchange,提问作者Aleksander Dorkov
相关产品推荐
相关产品推荐

