在外部 gradle 插件中声明时,自定义 gradle 任务的工作方式有所不同

问题描述 投票:0回答:1

我完全不知道如何修复它(已经浪费了 5 个小时调试这个问题)所以我希望你能帮助我。我有以下任务

open class FatJarTask: Jar() {

    init {

        val configuration = project.configurations.getByName("runtimeClasspath")

        manifest.apply {
            attributes["Timestamp"] = System.currentTimeMillis()
        }

        project.plugins.withType(JavaPlugin::class.java) {
            val sourceSets = project.extensions.getByType(SourceSetContainer::class.java)
            from(sourceSets.getByName("main").output)
        }

        from(configuration.map { if (it.isDirectory) it else project.zipTree(it) }, {
            duplicatesStrategy = DuplicatesStrategy.EXCLUDE
        })

        isZip64 = true
    }
}

在我的自定义 gradle 插件中实现(已发布到 Maven 存储库)。当这样使用时

tasks {
    register<FatJarTask>("fatJar")
}

我收到错误

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':project:fatJar'.
> Entry META-INF/LICENSE is a duplicate but no duplicate handling strategy has been set. Please refer to https://docs.gradle.org/8.10.1/dsl/org.gradle.api.tasks.Copy.html#org.gradle.api.tasks.Copy:duplicatesStrategy for details.

如果我按原样将此任务的实现移至使用它的项目的

build.gradle.kts
,则不会出现错误。

因此,由于某种原因,当任务实现来自外部 gradle 插件时,未设置

duplicatesStrategy
。我错过了什么?

kotlin gradle gradle-plugin
1个回答
0
投票

这是一个范围问题。解决办法是

        from(configuration.map { if (it.isDirectory) it else project.zipTree(it) }, {
            it.duplicatesStrategy = DuplicatesStrategy.EXCLUDE
        })

添加通知

it.

© www.soinside.com 2019 - 2024. All rights reserved.