为什么这是接收器类型不匹配,而它似乎与我在Gradle文档中看到的相匹配



我正在将构建从Buildr转换为Gradle。

到目前为止,我有以下构建脚本:

repositories {
jcenter()
}
allprojects {
version = "0.8.1-SNAPSHOT"
group = "org.trypticon.hex"
}
subprojects {
apply(plugin = "java-library")
apply(plugin = "maven-publish")
apply(plugin = "signing")
configure<JavaPluginExtension> {
sourceCompatibility = JavaVersion.VERSION_11
withJavadocJar()
withSourcesJar()
}
dependencies {
"testImplementation"("junit:junit:4.13")
}
configure<PublishingExtension> {
repositories {
maven {
url = uri(if (version.toString().contains("SNAPSHOT")) {
"https://oss.sonatype.org/content/repositories/snapshots"
} else {
"https://oss.sonatype.org/service/local/staging/deploy/maven2"
})
credentials {
username = System.getenv("DEPLOY_USER")
password = System.getenv("DEPLOY_PASS")
}
}
}
publications {
register<MavenPublication>("mavenJava") {
pom {
// omitting a bunch of metadata unrelatted to the issue
}
}
}
}
configure<SigningExtension> {
sign(publishing.publications["mavenJava"])
}
}

当我尝试构建时,我得到的是:

build.gradle.kts:124:14: Unresolved reference. None of the following candidates is applicable because of receiver type mismatch: 
public val PluginDependenciesSpec.publishing: PluginDependencySpec defined in org.gradle.kotlin.dsl

IntelliJ表示,类型匹配并且没有显示错误。

我从Gradle文档中的代码开始,它说要使用这个:

signing {
sign(publishing.publications["mavenJava"])
}

但当在subprojects块内时,这会失败。

使用:

  • 等级6.8
  • Java 11.0.3

进一步调查:

我试着把线分开,看看到底是哪个地方出了问题。

configure<SigningExtension> {
val e: PublishingExtension = publishing
val p: Publication = e.publications["mavenJava"]
sign(p)
}

错误直接指向第一行上的publishing。在IDEA中将其悬停在上面,它有益地"告诉"我Project.publishingPublishingExtension,因此调用不会显示错误。现在的问题是,为什么在检查文件时它很好,但在运行时却失败了?我认为这正是切换到Kotlin会停止的事情。:(

我也遇到了类似的问题,我通过编写以下代码解决了这个问题:

configure<SigningExtension> {
val pubExt = checkNotNull(extensions.findByType(PublishingExtension::class.java))
val publication = pubExt.publications["your_publication"]
sign(publication)
}

在您的情况下,your_publication应替换为mavenJava

最新更新