我正在将构建从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.publishing
是PublishingExtension
,因此调用不会显示错误。现在的问题是,为什么在检查文件时它很好,但在运行时却失败了?我认为这正是切换到Kotlin会停止的事情。:(
我也遇到了类似的问题,我通过编写以下代码解决了这个问题:
configure<SigningExtension> {
val pubExt = checkNotNull(extensions.findByType(PublishingExtension::class.java))
val publication = pubExt.publications["your_publication"]
sign(publication)
}
在您的情况下,your_publication
应替换为mavenJava
。