Spring Boot 3.4.4构建报错:无效的Buildpack引用gcr.io/paketo-buildpacks/adoptium
修复Spring Boot 3.4.4 + Cloud Native Buildpacks构建错误
问题背景
我的Spring Boot(3.4.4)应用使用Cloud Native Buildpacks构建时失败,核心错误为Invalid buildpack reference 'gcr.io/paketo-buildpacks/adoptium'。
配置信息
<execution> <configuration> <image> <builder>paketobuildpacks/builder-jammy-base</builder> <env> <BP_SPRING_CLOUD_BINDINGS_DISABLED>true</BP_SPRING_CLOUD_BINDINGS_DISABLED> <BP_OCI_DESCRIPTION>${project.description}</BP_OCI_DESCRIPTION> <BP_OCI_VENDOR>${project.organization.name}</BP_OCI_VENDOR> <BP_OCI_CREATED>${maven.build.timestamp}</BP_OCI_CREATED> <BP_OCI_SOURCE>${CI_PROJECT_URL}</BP_OCI_SOURCE> <BP_OCI_REVISION>${CI_COMMIT_SHA}</BP_OCI_REVISION> <BP_HEALTH_CHECKER_ENABLED>true</BP_HEALTH_CHECKER_ENABLED> <BPE_LANG>en_US.UTF-8</BPE_LANG> </env> <buildpacks> <buildpack>gcr.io/paketo-buildpacks/adoptium</buildpack> <buildpack>urn:cnb:builder:paketo-buildpacks/java</buildpack> <buildpack>gcr.io/paketo-buildpacks/health-checker:latest</buildpack> </buildpacks> <createdDate>${maven.build.timestamp}</createdDate> </image> <docker> <publishRegistry> <url>${docker.publishRegistry.url}</url> <username>${docker.publishRegistry.username}</username> <password>${docker.publishRegistry.password}</password> </publishRegistry> </docker> </configuration> <goals> <goal>build-image-no-fork</goal> </goals> </execution>
错误日志
Caused by: org.apache.maven.plugin.PluginExecutionException: Execution default of goal org.springframework.boot:spring-boot-maven-plugin:3.4.4:build-image-no-fork failed: Invalid buildpack reference 'gcr.io/paketo-buildpacks/adoptium' at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:133) at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute2 (MojoExecutor.java:328) at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute (MojoExecutor.java:316) at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:212) at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:174) at org.apache.maven.lifecycle.internal.MojoExecutor.access$000 (MojoExecutor.java:75) at org.apache.maven.lifecycle.internal.MojoExecutor$1.run (MojoExecutor.java:162) at org.apache.maven.plugin.DefaultMojosExecutionStrategy.execute (DefaultMojosExecutionStrategy.java:39) at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:159) at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:105) at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:73) at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:53) at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:118) at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:261) at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:173) at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:101) at org.apache.maven.cli.MavenCli.execute (MavenCli.java:906) at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:283) at org.apache.maven.cli.MavenCli.main (MavenCli.java:206) at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method) at jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:77) at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke (Method.java:568) at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:283) at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:226) at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:407) at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:348) Caused by: java.lang.IllegalArgumentException: Invalid buildpack reference 'gcr.io/paketo-buildpacks/adoptium' at org.springframework.boot.buildpack.platform.build.BuildpackResolvers.resolve (BuildpackResolvers.java:77) at org.springframework.boot.buildpack.platform.build.BuildpackResolvers.resolveAll (BuildpackResolvers.java:64) at org.springframework.boot.buildpack.platform.build.Builder.getBuildpacks (Builder.java:168) at org.springframework.boot.buildpack.platform.build.Builder.build (Builder.java:114) at org.springframework.boot.maven.BuildImageMojo.buildImage (BuildImageMojo.java:269) at org.springframework.boot.maven.BuildImageMojo.execute (BuildImageMojo.java:258) at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:126) at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute2 (MojoExecutor.java:328) at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute (MojoExecutor.java:316) at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:212) at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:174) at org.apache.maven.lifecycle.internal.MojoExecutor.access$000 (MojoExecutor.java:75) at org.apache.maven.lifecycle.internal.MojoExecutor$1.run (MojoExecutor.java:162) at org.apache.maven.plugin.DefaultMojosExecutionStrategy.execute (DefaultMojosExecutionStrategy.java:39) at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:159) at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:105) at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:73) at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:53) at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:118) at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:261) at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:173) at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:101) at org.apache.maven.cli.MavenCli.execute (MavenCli.java:906) at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:283) at org.apache.maven.cli.MavenCli.main (MavenCli.java:206) at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method) at jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:77) at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke (Method.java:568) at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:283) at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:226) at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:407) at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:348)
调研信息
- 自4月以来无Adoptium Buildpack新版本发布,当前稳定版本为v12.1.2
- 本地已下载的Adoptium Buildpack镜像版本和哈希值验证正确,执行
docker image inspect d097b016849b确认版本为12.1.2且哈希匹配
修复方案
方案1:移除显式指定的Adoptium Buildpack(推荐)
Paketo的Java Buildpack(urn:cnb:builder:paketo-buildpacks/java)已经内置了Adoptium Buildpack作为依赖组件,无需单独声明。修改<buildpacks>配置如下:
<buildpacks> <buildpack>urn:cnb:builder:paketo-buildpacks/java</buildpack> <buildpack>gcr.io/paketo-buildpacks/health-checker:latest</buildpack> </buildpacks>
这种方式能让Java Buildpack自动管理Adoptium的版本,避免版本冲突和引用格式问题。
方案2:修正Adoptium Buildpack的引用格式
如果必须显式指定Adoptium Buildpack,需要使用符合CNB规范的完整引用格式:
- 方式一:指定具体版本号
<buildpack>gcr.io/paketo-buildpacks/adoptium:12.1.2</buildpack>
- 方式二:使用Buildpack ID格式
<buildpack>paketo-buildpacks/adoptium</buildpack>
Spring Boot 3.4.x的Buildpack客户端对引用格式校验更严格,无版本号的短域名引用不再被支持。
内容的提问来源于stack exchange,提问作者dur
相关产品推荐
相关产品推荐

