Gradle 8 plugin-publish失败,出现“class org.gradle.API.internal.provider.DefaultSetProperty cannot be cast to class java.util.Collection”错误

ws51t4hk  于 2023-03-30  发布在  Java
关注(0)|答案(1)|浏览(157)

当我将我的Gradle版本从7.x升级到8.x,然后尝试发布我的插件时,我遇到了以下模糊的错误:
原因:类org.gradle.API.internal.provider.DefaultSetProperty无法强制转换为类java.util.Collection(org.gradle.api.internal.provider.DefaultSetProperty位于加载器org.gradle.internal.classloader. VisitableURLClassLoader@66cd51c3;集合在加载器“bootstrap”的模块java.base中)
我所做的唯一相关更改是删除pluginBundle块:

pluginBundle {  
    website = "..."  
    vcsUrl = "..."  
    tags = listOf("...")  
}

并将其迁移到最新实践中,因为Gradle团队已将其迁移到gradlePlugin,以改进/简化流程:

gradlePlugin {  
    website.set("...")  
    vcsUrl.set("...")  
  
    plugins {  
        create("...") {  
            id = project.group.toString()  
            displayName = project.name  
            description = project.description.toString()  
            implementationClass = "..."  
            tags.set(setOf("..."))  
        }  
    }}

这些都是直接从官方文档中删除的,所以我很惊讶这会失败。如果有帮助,这里是我的相关项目依赖细节:
| 依赖性|版本|
| --------------|--------------|
| Kotlin|1.8.10节|
| java |十七岁|
| grad尔|八、0、2|
| com.gradle.plugin-publish |1.0.0版本|
| io.github.gradle-nexus.publish-plugin |1.1.0版本|

d6kp6zgx

d6kp6zgx1#

com.gradle.plugin-publish升级到1.1.x1.0.0版本有一个严重的bug,当单独依赖gradlePlugin块时会失败:
版本1.1.0(最新)

  • 修复单纯依靠gradlePlugin块配置插件发布时处理tags的bug
  • 禁止绕过Maven Publish插件生成插件发布元数据

参见:com.gradle.plugin-publish/1.1.0
8.0中,pluginBundle块被标记为删除。因此,当您从7.x升级时,必须将这些属性移动到gradlePlugin,这就是您遇到此错误的原因。您也可以在docs/publish-plugin建议升级中看到此说明:

***注意:*如果您使用的是 1.0.X 版本的插件,请至少更新到 1.1.0 版本,该版本包含关键错误修复。

因此,只需升级到1.1.x就可以解决问题...
其他有用资源:

相关问题