我完全不知道如何修复它(已经浪费了 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
。我错过了什么?
这是一个范围问题。解决办法是
from(configuration.map { if (it.isDirectory) it else project.zipTree(it) }, {
it.duplicatesStrategy = DuplicatesStrategy.EXCLUDE
})
添加通知
it.