首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Gradle:将复制任务从groovy转换为kotlin gradle脚本

Gradle:将复制任务从groovy转换为kotlin gradle脚本
EN

Stack Overflow用户
提问于 2021-01-17 07:07:33
回答 1查看 488关注 0票数 1

我坚持将groovy gradle脚本转换为kotlin脚本。我正在尝试在我的项目中使用pf4j,并且已经开始将他们的示例build.gradle转换为.gradle.kts。示例可以在这里找到:https://github.com/pf4j/pf4j/blob/master/demo_gradle/plugins/build.gradle

因为我卡住了,所以我现在只尝试了一个插件,然而他们的例子是将任务应用到所有子项目。因此,要意识到其中的区别。

因此,我尝试用下面的gradle.kts文件替换他们的构建示例:

代码语言:javascript
复制
val pluginClass: String by project
val pluginId: String by project
val pluginProvider: String by project
val version: String by project
val pf4jVersion: String by project

dependencies {
  implementation(project(":api"))
    implementation("org.pf4j:pf4j:${pf4jVersion}")
    annotationProcessor("org.pf4j:pf4j:${pf4jVersion}")
}


val buildPluginArchive = task("plugin", Jar::class) {
    manifest {
        attributes["Plugin-Class"] = pluginClass
        attributes["Plugin-Id"] = pluginId
        attributes["Plugin-Version"] = version
        attributes["Plugin-Provider"] = pluginProvider
    }

    archiveBaseName.set("plugin-${pluginId}")

    into("classes") {
        from(sourceSets.main.get().output)
    }
    dependsOn(configurations.runtimeClasspath)
    into("lib") {
        from({
            configurations.runtimeClasspath.get().filter { it.name.endsWith("jar") }.map { zipTree(it) }
        })
    }
    archiveExtension.set("zip")
}

tasks {
    "build" {
        dependsOn(buildPluginArchive)
    }
}

它可以工作并生成一个压缩文件,但内容与原始文件不匹配。首先,lib文件夹不仅包含jar文件,还包含文件夹结构(更重要的是,META-INF文件夹包含MANIFEST.MF文件,这会混淆插件加载器)。并且它缺少MANIFEST.MF /META-INF文件夹中的类。

我怀疑问题出在原始build.gradle中的这个配置上:

代码语言:javascript
复制
into('classes') {
    with jar
}

我只是找不到任何有意义的文档来说明“使用jar”到底做了什么,或者如何在gradle.kts中复制这种行为。

如何使用gradle.kts配置获得与演示相同的输出?

EN

回答 1

Stack Overflow用户

发布于 2021-01-17 08:32:10

我只是找不到任何有意义的文档来说明“使用jar”到底做了什么

withJar任务类型中的一种方法。请参阅Jar任务的method details部分,滚动到底部,您将找到有关with方法的信息。它的签名是:

代码语言:javascript
复制
CopySpec with(CopySpec... sourceSpecs)

现在,如果您查看JarAPI documentation,您将看到with实际上来自于Jar的超类实现的CopySpec

with jar中的jar部分引用由Java plugin创建的名为jar的任务。

说到这里,with部分的一种更常用的方法是:

代码语言:javascript
复制
tasks {
    val plugin by registering(Jar::class) {
        into("classes") {
            with(jar.get())
        }
    }
    build {
        dependsOn(plugin)
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65755652

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档