【问题标题】:Android: Add maven-publish configuration in a separate kotlin dsl scriptAndroid:在单独的 kotlin dsl 脚本中添加 maven-publish 配置
【发布时间】:2021-09-26 22:36:05
【问题描述】:

我编写了一个名为 publish.gradle.gradle 脚本,它配置了 publishing {} 以释放我的工件。

为什么要使用单独的脚本?我有多个模块,通过这样做,每个 可发布 模块只定义了一些变量。

模块build.gradle.kts:

// Module's blah blah

apply(from = "../publish.gradle")

publish.gradle:

apply plugin: 'maven-publish'



publishing {
   publications {
      // configure release process
   }
}
  

我最近决定迁移到 Gradle Kotlin DSL。但是,有一个问题:

像这样添加publication {}

plugins {
    `maven-publish`
}

publication {

}

导致这个错误:

Expression 'publishing' cannot be invoked as a function. The function 'invoke()' is not found
Unresolved reference. None of the following candidates is applicable because of receiver type mismatch:
public val PluginDependenciesSpec.publishing: PluginDependencySpec defined in org.gradle.kotlin.ds

总结为

PluginDependenciesSpec 不作为接收器存在

有什么区别?

TL;博士

我已将publishing {} 配置添加到单独的脚本中,该脚本在.gradle groovy 格式下有效,但我无法转换为.gradle.kts kotlin 格式。 publishingPluginDependenciesSpec 类的扩展,脚本中不存在该类。

【问题讨论】:

    标签: android gradle gradle-kotlin-dsl maven-publish


    【解决方案1】:

    这对我有用:

    plugins {
        id("maven-publish")
    }
    
    configure<PublishingExtension> {
        publications.create<MavenPublication>("myPlugin") {
            groupId = "com.myCompany.android"
            artifactId = "MyPlugin"
            version = "1.0.0"
            pom.packaging = "jar"
            artifact("$buildDir/libs/MyPlugin.jar")
    
        }
        repositories {
            mavenLocal()
       }
    }
    

    我了解您来自哪里,从 groovy 转换为 kotlin 脚本并不是简单的一对一翻译,我们大多数人,包括我自己,都是通过示例编写代码。换句话说,你只需要看一个简单的例子,剩下的你就可以弄清楚了。当示例很容易获得时,这很有效。找不到示例时,您需要做的是转向API文档。例如,https://docs.gradle.org/current/dsl/org.gradle.api.publish.PublishingExtension.html 向您显示 PublishingExtension 的可用属性,您可以继续深入了解您在下一级拥有哪些属性。当示例可能使用旧版本并且可能不再适用时,这一点尤其重要。我会说,在 kotlin 脚本中访问扩展并不那么明显,需要 configure 块。这是一个很大的不同,但我喜欢这种方法,因为它使扩展属性的一部分更加清晰。顺便说一句,kotlin 想要双引号,单引号已经不能接受了。

    【讨论】:

      猜你喜欢
      • 2021-05-15
      • 1970-01-01
      • 1970-01-01
      • 2020-12-23
      • 2018-05-15
      • 2017-10-14
      • 2020-01-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多