如何修复Gradle构建报错:'void org.gradle.api.internal...'
问题描述
运行gradlew assemble构建MyHome后端时出现以下错误:
FAILURE: Build failed with an exception.
What went wrong:
'void org.gradle.api.internal.artifacts.publish.ArchivePublishArtifact.(org.gradle.api.tasks.bundling.AbstractArchiveTask)'Try:
Run with --stacktrace option to get the stack trace.
Run with --debug option to get more log output.
Run with --scan to get full insights.Get more help at https://help.gradle.org
BUILD FAILED in 1s
Watched directory hierarchies: []
项目的build.gradle文件内容如下:
plugins { id "idea" id "org.openapi.generator" } repositories { mavenCentral() } dependencies { implementation "io.swagger:swagger-annotations:${swaggerAnnotationsVersion}" implementation "javax.validation:validation-api:${javaxValidationApiVersion}" implementation "com.fasterxml.jackson.core:jackson-annotations:${fasterXmlJacksonAnnotationsVersion}" implementation "org.springframework.boot:spring-boot-starter-web:${springBootVersion}" implementation "org.openapitools:jackson-databind-nullable:${jacksonDatabindNullableVersion}" implementation "io.springfox:springfox-swagger2:${springFoxVersion}" implementation "io.springfox:springfox-swagger-ui:${springFoxVersion}" implementation "io.springfox:springfox-spring-web:${springFoxVersion}" implementation "org.springframework.data:spring-data-commons:${springBootVersion}" compileOnly "org.projectlombok:lombok:${lombokVersion}" annotationProcessor "org.projectlombok:lombok:${lombokVersion}" } task generateOpenApiSpec(type: org.openapitools.generator.gradle.plugin.tasks.GenerateTask) { generatorName = "spring" inputSpec = "$projectDir/src/main/resources/public/swagger/api.yaml".toString() outputDir = "$buildDir/generated".toString() apiPackage = "com.myhome.api" invokerPackage = "com.myhome.utils" modelPackage = "com.myhome.model" typeMappings = [ 'bigdecimal': 'java.math.BigDecimal' ] additionalProperties = [ "skipDefaultInterface": "true", "interfaceOnly" : "true", "booleanGetterPrefix" : "is", "useTags" : "true" ] importMappings = [ 'Pageable': 'org.springframework.data.domain.Pageable', 'PageInfo': 'com.myhome.utils.PageInfo' ] } compileJava.dependsOn(generateOpenApiSpec) def generatedSourcesDir = file("build/generated/src/main/java") sourceSets { main { java { srcDir 'build/generated/src/main/java' } } } idea { module { sourceDirs += generatedSourcesDir generatedSourceDirs += generatedSourcesDir } }
问题原因
该错误是Gradle版本与OpenAPI Generator插件版本不兼容导致的。ArchivePublishArtifact的构造函数签名在Gradle不同版本中发生了变更,旧版本的OpenAPI插件调用了已废弃或移除的构造方法。
解决步骤
1. 对齐Gradle与OpenAPI插件版本
- 查看
gradle/wrapper/gradle-wrapper.properties文件,确认当前Gradle版本; - 根据Gradle版本匹配兼容的OpenAPI插件版本:
- Gradle 7.x+ 适配OpenAPI Generator插件6.0.0及以上版本;
- Gradle 6.x 适配插件5.x版本。
修改build.gradle中的插件声明,指定兼容版本:
plugins { id "idea" id "org.openapi.generator" version "6.6.0" // 替换为与Gradle匹配的版本 }
2. 校验Spring Boot版本兼容性
确保Spring Boot版本与Gradle版本匹配:
- Gradle 7.x+ 适配Spring Boot 2.5.x及以上;
- Gradle 6.x 适配Spring Boot 2.4.x及以下。
3. 清理缓存并重新构建
执行以下命令清理构建缓存,再重新构建:
./gradlew clean assemble --stacktrace
--stacktrace参数可帮助定位是否存在其他依赖冲突问题。
4. 验证生成代码配置
确认generateOpenApiSpec任务中指定的api.yaml文件路径正确,确保文件存在,避免因文件缺失导致间接构建失败。
内容的提问来源于stack exchange,提问作者Saahil Shaikh

