GCP Cloud Build构建失败:javac: invalid target release: 11求助
Cloud Build构建Maven项目失败:javac无效目标版本11
错误信息
Step #0: [ERROR] COMPILATION ERROR : Step #0: [INFO] ------------------------------------------------------------- Step #0: [ERROR] javac: invalid target release: 11 Step #0: Usage: javac <options> <source files> Step #0: use -help for a list of possible options Step #0: Step #0: [INFO] 1 error Step #0: [INFO] ------------------------------------------------------------- Step #0: [INFO] ------------------------------------------------------------------------ Step #0: [INFO] BUILD FAILURE Step #0: [INFO] ------------------------------------------------------------------------ Step #0: [INFO] Total time: 18.785 s Step #0: [INFO] Finished at: 2023-05-03T05:52:33Z Step #0: [INFO] ------------------------------------------------------------------------ Step #0: [ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.10.1:compile (default-compile) on project job: Compilation failure Step #0: [ERROR] javac: invalid target release: 11 Step #0: [ERROR] Usage: javac <options> <source files>
本地环境与项目配置
本地使用Java 11(Oracle JDK,JAVA_HOME=/usr/lib/jvm/jdk-11),IntelliJ IDEA中已将项目SDK、模块依赖及编译器目标字节码均设置为Java 11,项目可正常运行。
pom.xml关键配置
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.ddd.dd</groupId> <artifactId>job</artifactId> <version>1.0.0-RELEASE</version> <packaging>jar</packaging> <name>job</name> <description>project for Spring Boot</description> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> <java.version>11</java.version> </properties> <!-- 省略依赖部分 --> <build> <plugins> <!-- 省略其他插件 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.10.1</version> <configuration> <source>${java.version}</source> <target>${java.version}</target> <fork>true</fork> </configuration> </plugin> </plugins> </build> </project>
Cloud Build相关配置
Dockerfile
FROM openjdk:11 WORKDIR /job ADD ./target/xxxx-1.0.0-RELEASE.jar /job EXPOSE 22 9999 ENV NAME job CMD ["java","-jar", "-Duser.timezone=Australia/Sydney", "xxxx-1.0.0-RELEASE.jar"]
cloudbuild.yaml
steps: # build the container image - name: 'gcr.io/cloud-builders/mvn' args: ['install', '-Dmaven.test.skip=true'] # build the container image - name: 'gcr.io/cloud-builders/docker' args: ['build', '-t', 'gcr.io/$PROJECT_ID/xxxx-$_NAMESPACE:$BUILD_ID', '.'] - name: "gcr.io/cloud-builders/gcloud" entrypoint: 'bash' args: - '-c' - | for image_name in $(gcloud container images list); do for digest in $(gcloud container images list-tags $image_name --format=json | awk '/digest/{ print $2 }' | sed -e 's/^"//' -e 's/.\{2\}$//' | tail -n +6); do gcloud container images -q delete $image_name@$digest --force-delete-tags; done; done; # push the container image to Container Registry - name: 'gcr.io/cloud-builders/docker' args: ['push', 'gcr.io/$PROJECT_ID/xxxx-$_NAMESPACE:$BUILD_ID'] # Deploy container image to Cloud Run - name: "gcr.io/cloud-builders/gcloud" entrypoint: 'bash' args: - '-c' - | gcloud container clusters get-credentials oni-cluster --zone australia-southeast1-b sed -i.bak 's#IMAGE_PLACEHOLDER#gcr.io/$PROJECT_ID/xxxx-$_NAMESPACE:$BUILD_ID#' ./k8s/sync/*.yaml sed -i.bak 's#NAMESPACE_PLACEHOLDER#$_NAMESPACE#' ./k8s/sync/*.yaml kubectl --namespace=$_NAMESPACE apply -f k8s/sync/ images: - gcr.io/$PROJECT_ID/xxxx-$_NAMESPACE:$BUILD_ID
解决方案
问题核心是Cloud Build中使用的Maven构建镜像默认Java版本低于11,导致无法编译目标版本为11的代码。可通过以下方式解决:
1. 使用指定Java 11的Maven构建镜像
修改cloudbuild.yaml中的Maven步骤,替换为支持Java 11的官方镜像:
- name: 'gcr.io/cloud-builders/mvn:openjdk-11' args: ['install', '-Dmaven.test.skip=true']
2. (可选)在Maven步骤中显式指定JAVA_HOME
如果无法更换镜像,可在Maven执行时指定Java 11的路径(需确认镜像中已安装Java 11):
- name: 'gcr.io/cloud-builders/mvn' args: ['install', '-Dmaven.test.skip=true', '-Djava.home=/usr/lib/jvm/java-11-openjdk-amd64']
3. 验证Maven插件配置
确保maven-compiler-plugin的配置正确,且fork参数设置为true(已在你的pom.xml中配置),这样Maven会使用指定的Java版本进行编译。
内容的提问来源于stack exchange,提问作者Gunel
相关产品推荐
相关产品推荐

