如何解决当它似乎与我在 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
我从 Gradle 文档中的代码开始,它说使用这个:
signing {
sign(publishing.publications["mavenJava"])
}
但是在 subprojects
块内时会失败。
使用:
- Gradle 6.8
- Java 11.0.3
进一步调查:
我试着把这些行分开,看看问题出在哪一点。
configure<SigningExtension> {
val e: PublishingExtension = publishing
val p: Publication = e.publications["mavenJava"]
sign(p)
}
错误直接指向第一行的 publishing
。在 IDEA 中将鼠标悬停在它上面,它有助于告诉我 Project.publishing
是一个 PublishingExtension
,因此调用没有显示错误。现在的问题是,为什么在检查文件时没问题,但在运行时失败?我认为这正是切换到 Kotlin 将停止的事情。 :(
解决方法
我遇到了类似的问题,我通过编写以下代码解决了这个问题:
configure<SigningExtension> {
val pubExt = checkNotNull(extensions.findByType(PublishingExtension::class.java))
val publication = pubExt.publications["your_publication"]
sign(publication)
}
在您的情况下,your_publication
应替换为 mavenJava
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。