我正在嘗試使用 Cucumber lib 撰寫功能測驗,不幸的是,我不能同時使用 Cucumber 和 Gradle,構建測驗時出現錯誤。我是 Java 環境的真正初學者。我用于這個專案:Kotlin / Gradle / Cucumber。
這是我的 build.gradle.kts 的樣子
import org.gradle.jvm.tasks.Jar
plugins {
application
`java-library`
`maven-publish`
signing
jacoco
kotlin("jvm") version "1.3.61"
}
repositories {
mavenCentral()
}
dependencies {
implementation(kotlin("stdlib"))
testImplementation("org.mock-server:mockserver-netty:5.3.0")
testImplementation("io.cucumber:cucumber-java8:7.0.0")
testImplementation("io.cucumber:cucumber-junit:7.0.0")
}
tasks.register<Jar>("fatJar") {
archiveFileName.set("${artifactName}-${artifactVersion}.jar")
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
manifest {
attributes("Main-Class" to application.mainClassName)
}
from(configurations.runtimeClasspath.get()
.onEach { println("Add from dependencies: ${it.name}") }
.map { if (it.isDirectory) it else zipTree(it) })
val sourcesMain = sourceSets.main.get()
sourcesMain.allSource.forEach { println("Add from sources: ${it.name}") }
from(sourcesMain.output)
}
tasks.register<Jar>("sourcesJar") {
from(sourceSets.main.get().allJava)
archiveClassifier.set("sources")
}
tasks.register("cucumber") {
dependsOn compileTestKotlin
doLast {
javaexec {
main = "io.cucumber.core.cli.Main"
classpath = configurations.cucumberRuntime sourceSets.main.output sourceSets.test.output
}
}
}
這是錯誤
* What went wrong:
Script compilation errors:
Line 104: dependsOn compileTestKotlin
^ Unresolved reference: compileTestKotlin
Line 108: classpath = configurations.cucumberRuntime sourceSets.main.output sourceSets.test.output
^ Unresolved reference: cucumberRuntime
Line 108: classpath = configurations.cucumberRuntime sourceSets.main.output sourceSets.test.output
^ Unresolved reference: output
Line 108: classpath = configurations.cucumberRuntime sourceSets.main.output sourceSets.test.output
^ Unresolved reference: output
4 errors
謝謝你的幫助。
uj5u.com熱心網友回復:
看起來您正在嘗試從 Groovy DSL 轉換為 Kotlin。請記住,在 Kotlin DSL 中,一切都是強型別的,因為 Kotlin 是強型別的。
您需要將所有任務創建包裝在tasks { }塊中才能訪問compileTestKotlin. 目前,this您的cucumber任務注冊的范圍是任務本身,它是DefaultTask不知道的型別compileTestKotlin。
此外:
mainClassName已棄用,mainClass應改為使用。- 該
java擴展提供了為您創建源 JAR 的功能,因此無需自己創建任務,除非您對 JAR 有特定要求,而您的代碼段似乎并非如此。 - 由于
cucumber任務的目標是執行 Java 主類,因此您可以將JavaExec其用作任務型別而不是DefaultTask
拋光樣品(未經測驗):
plugins {
id("org.jetbrains.kotlin.jvm") version "1.5.31"
application
}
repositories {
mavenCentral()
}
configurations {
register("cucumberRuntime") {
extendsFrom(testImplementation.get())
}
}
dependencies {
implementation(platform("org.jetbrains.kotlin:kotlin-bom"))
implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
testImplementation(platform("io.cucumber:cucumber-bom:7.2.3"))
testImplementation("io.cucumber:cucumber-java8")
testImplementation("io.cucumber:cucumber-junit")
}
java {
withSourcesJar()
}
application {
mainClass.set("io.mateo.ExampleKt")
}
tasks {
register<Jar>("fatJar") {
archiveFileName.set("foo-bar.jar")
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
manifest {
attributes("Main-Class" to application.mainClass.get())
}
from(configurations.runtimeClasspath.get()
.onEach { println("Add from dependencies: ${it.name}") }
.map { if (it.isDirectory) it else zipTree(it) })
val sourcesMain = sourceSets.main.get()
sourcesMain.allSource.forEach { println("Add from sources: ${it.name}") }
from(sourcesMain.output)
}
register<JavaExec>("cucumber") {
dependsOn(compileTestKotlin)
mainClass.set("io.cucumber.core.cli.Main")
classpath = configurations["cucumberRuntime"] sourceSets.main.get().output sourceSets.test.get().output
}
}
參考:
- https://docs.gradle.org/current/userguide/kotlin_dsl.html
- https://docs.gradle.org/current/userguide/lazy_configuration.html
- https://docs.gradle.org/current/userguide/task_configuration_avoidance.html
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/438988.html
下一篇:構建后如何觸發任務
