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

Gradle 8升级后插件发布报类型转换错误求助

Gradle 8.x升级后发布插件出现DefaultSetProperty转Collection类型转换错误

问题场景

将Gradle从7.x升级到8.x后,执行插件发布时触发以下类型转换错误:

class org.gradle.api.internal.provider.DefaultSetProperty cannot be cast to class java.util.Collection (
org.gradle.api.internal.provider.DefaultSetProperty位于org.gradle.internal.classloader.VisitableURLClassLoader @66cd51c3的未命名模块中;
java.util.Collection位于引导加载器的java.base模块中
)

已按照官方文档完成配置迁移:移除原pluginBundle块,将配置迁移至gradlePlugin块,但错误仍存在。当前依赖版本:

  • Kotlin:1.8.10
  • Java:17
  • Gradle:8.0.2
  • com.gradle.plugin-publish:1.0.0
  • io.github.gradle-nexus.publish-plugin:1.1.0

解决方案

1. 升级com.gradle.plugin-publish插件版本

错误的核心原因是**com.gradle.plugin-publish:1.0.0与Gradle 8.x不兼容**。旧版本插件内部直接将SetProperty视为Collection的子类进行操作,但Gradle 8.x对Property系列类型的实现做了调整,DefaultSetProperty不再直接实现Collection接口,导致类型转换失败。

将插件版本升级至1.1.0及以上(推荐使用最新稳定版,如1.2.0):

plugins {
    id("com.gradle.plugin-publish") version "1.2.0"
    // 其他插件配置...
}

2. 验证gradlePlugin块配置正确性

确认tags的设置方式符合Gradle 8.x的规范:

gradlePlugin {  
    website.set("你的插件官网地址")  
    vcsUrl.set("你的代码仓库地址")  

    plugins {  
        create("插件ID") {  
            id = project.group.toString()  
            displayName = project.name  
            description = project.description.toString()  
            implementationClass = "你的插件实现类全限定名"  
            tags.set(setOf("标签1", "标签2")) // 传入Set类型,匹配SetProperty的要求
        }  
    }
}

3. 可选:升级nexus发布插件(如遇连带问题)

如果升级plugin-publish后仍有其他兼容性问题,可将io.github.gradle-nexus.publish-plugin升级至最新稳定版(如1.3.0):

plugins {
    id("io.github.gradle-nexus.publish-plugin") version "1.3.0"
    // 其他插件配置...
}

验证

完成版本升级后,重新执行发布命令(如publishPlugins),即可解决类型转换错误。

内容的提问来源于stack exchange,提问作者u-ways

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 19:43:37