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

Gradle集成Ant配置执行javac时JAXB代码生成异常排查

Gradle JAXB生成Java类后javac编译失败(invalid target release: 11)

问题场景

使用Gradle 4.10.3配置了genJaxb任务从WSDL文件生成Java类,但在执行javac编译环节失败,核心错误提示为invalid target release: 11。

任务配置代码

task genJaxb {
    ext.sourcesDir = "${buildDir}/generated-sources/jaxb"
    ext.classesDir = "${buildDir}/classes/jaxb"
    ext.schemaBnfo = "${projectDir}/src/main/resources/wsdl/1C_BNFO.wsdl"
    ext.schemaUh = "${projectDir}/src/main/resources/wsdl/1C_UH.wsdl"
    ext.sourcesBnfoPackage = 'package.integration.onec.ws.model.bnfo'
    ext.sourcesUhPackage = 'package.integration.onec.ws.model.uh'

    outputs.dir classesDir

    doLast() {
        project.ant {
            taskdef name: "xjc", classname: "com.sun.tools.xjc.XJCTask",
                    classpath: configurations.jaxb.asPath
            mkdir(dir: sourcesDir)
            mkdir(dir: classesDir)

            xjc(destdir: sourcesDir, schema: schemaBnfo, package: sourcesBnfoPackage) {
                arg(value: "-wsdl")
            }

            xjc(destdir: sourcesDir, schema: schemaUh, package: sourcesUhPackage) {
                arg(value: "-wsdl")
            }

            javac(destdir: classesDir, source: sourceCompatibility, target: targetCompatibility, debug: true,
                    debugLevel: "lines,vars,source",
                    classpath: configurations.jaxb.asPath) {
                src(path: sourcesDir)
                include(name: "**/*.java")
                include(name: "*.java")
            }

            copy(todir: classesDir) {
                fileset(dir: sourcesDir, erroronmissingdir: false) {
                    exclude(name: "**/*.java")
                }
            }
        }
    }
}

错误日志

> Task :genJaxb FAILED
[ant:javac] : warning: 'includeantruntime' was not set, defaulting to build.sysclasspath=last; set to false for repeatable builds
[ant:javac] javac: invalid target release: 11
[ant:javac] Usage: javac <options> <source files>
[ant:javac] use -help for a list of possible options

FAILURE: Build failed with an exception.

* Where:
Build file 'ourproject\build.gradle' line: 105

* What went wrong:
Execution failed for task ':genJaxb'.
> Compile failed; see the compiler error output for details.

* Try:
Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Exception is:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':genJaxb'.
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:110)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:77)
    ...(省略堆栈中间部分)
Caused by: : Compile failed; see the compiler error output for details.
    at org.apache.tools.ant.taskdefs.Javac.compile(Javac.java:1426)
    at org.apache.tools.ant.taskdefs.Javac.execute(Javac.java:1130)
    ...(省略堆栈中间部分)

* Get more help at https://help.gradle.org

BUILD FAILED in 0s

问题原因

  1. Gradle版本兼容性限制:Gradle 4.10.3属于4.x系列,官方仅支持JDK 1.8到JDK 10,不兼容JDK 11。若项目配置的sourceCompatibility和targetCompatibility为11,而Gradle启动使用的JDK版本低于11,Ant的javac任务会因不支持target 11报错。
  2. Ant javac任务默认JDK:Ant的javac任务默认使用系统环境变量中的JDK或Gradle进程启动时的JDK,若该JDK版本低于11,无法编译target为11的代码。

解决方案

方案1:降低Java兼容性版本

将项目的sourceCompatibility和targetCompatibility调整为当前JDK支持的版本(比如JDK 8对应1.8),在build.gradle根级别添加:

sourceCompatibility = 1.8
targetCompatibility = 1.8

方案2:升级Gradle版本并适配JDK 11

Gradle 5.0及以上版本支持JDK 11,步骤如下:

  • 将Gradle版本升级到5.0+(推荐使用稳定版如5.6.4)
  • 确保系统安装了JDK 11,在gradle.properties中指定JDK路径:
    org.gradle.java.home=/path/to/jdk11
    

方案3:为Ant javac任务指定JDK 11路径

在genJaxb任务的javac配置中,直接指定JDK 11的javac可执行文件路径,同时添加includeantruntime: false消除警告:

javac(destdir: classesDir, source: sourceCompatibility, target: targetCompatibility, debug: true,
        debugLevel: "lines,vars,source",
        classpath: configurations.jaxb.asPath,
        executable: "/path/to/jdk11/bin/javac",
        includeantruntime: false) {
    src(path: sourcesDir)
    include(name: "**/*.java")
    include(name: "*.java")
}

内容的提问来源于stack exchange,提问作者Eljah

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 23:30:54