You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 09:37:07