当我阅读文档时:https://docs.gradle.org/current/javadoc/org/gradle/api/publish/maven/MavenPublication.html。我看到内容爆炸了。
MavenPublication 是 Gradle 如何表示/配置 应该以 Maven 格式发布一些东西。你直接添加一个命名的 Maven通过发布项目的publishing.publications容器 提供 MavenPublication 作为类型。
publishing { publications { myPublicationName(MavenPublication) { // Configure the publication here } } }
部分
myPublicationName(MavenPublication) {
// Configure the publication here
}
语法非常混乱。 myPublicationName不像变量,也不像闭包,也不像方法,我应该在语法上理解什么。
该语法称为“领域特定语言 (DSL)”。具体来说,您引用的示例是 Groovy DSL。顾名思义,它是使用 Groovy 语言编写的 DSL。 知道 Gradle 的核心 API 是使用纯 Java 编写的,但实现了各种 Groovy 特定 API,例如
。Gradle 的现代版本提供了另一种 DSL:Kotlin DSL
。顾名思义,它是使用 Kotlin 语言编写的 DSL。 您使用哪一个取决于您的偏好。但是,Gradle 的推荐和默认 DSL 是 Kotlin DSL:
https://blog.gradle.org/kotlin-dsl-is-now-the-default-for-new-gradle-buildsmyPublicationName
在普通Java中是:
PublishingExtension publishing = project.getExtensions().getByType(PublishingExtension.class);
publishing.getPublications().create("myPublicationName", MavenPublication.class, publication -> {})
在 Groovy 世界中,您可以省略
get
部分,该部分随后将变为
publishing.publications
。 Gradle 在 PublishingExtension
类型上提供了一种便捷的方法:void publications(Action<? super PublicationContainer> configure);
这允许:
publishing {
publications { // the convenient method
}
}
然后您可以看到
Action
中“this”的范围是
PublicationContainer
,然后您可以通过显式调用 create
方法(如上所示)或使用 Gradle 提供的 Groovy 特定习惯用法来创建发布,在这种情况下,调用不存在的方法会在幕后调用 create
,使用方法名称作为发布名称。