Java Gradle Kotlin、Cucumber和OKHttp

Java Gradle Kotlin、Cucumber和OKHttp,java,gradle,kotlin,cucumber,Java,Gradle,Kotlin,Cucumber,我试图在Kotlin中使用OkHttp和Cucumber设置一个spring引导项目,在运行Cucumber任务时出现以下错误。我怎么修理 Execution failed for task ':cucumber'. > Could not resolve all files for configuration ':cucumberRuntime'. > Could not resolve com.squareup.okio:okio:2.4.1. Required

我试图在Kotlin中使用OkHttp和Cucumber设置一个spring引导项目,在运行Cucumber任务时出现以下错误。我怎么修理

Execution failed for task ':cucumber'.
> Could not resolve all files for configuration ':cucumberRuntime'.
   > Could not resolve com.squareup.okio:okio:2.4.1.
     Required by:
         project : > com.squareup.okhttp3:okhttp:4.3.1
      > Cannot choose between the following variants of com.squareup.okio:okio:2.4.1:
          - jvm-api
          - jvm-runtime
          - metadata-api
        All of them match the consumer attributes:
          - Variant 'jvm-api' capability com.squareup.okio:okio:2.4.1:
              - Unmatched attributes:
                  - Found org.gradle.libraryelements 'jar' but wasn't required.
                  - Found org.gradle.status 'release' but wasn't required.
                  - Found org.gradle.usage 'java-api' but wasn't required.
                  - Found org.jetbrains.kotlin.platform.type 'jvm' but wasn't required.
          - Variant 'jvm-runtime' capability com.squareup.okio:okio:2.4.1:
              - Unmatched attributes:
                  - Found org.gradle.libraryelements 'jar' but wasn't required.
                  - Found org.gradle.status 'release' but wasn't required.
                  - Found org.gradle.usage 'java-runtime' but wasn't required.
                  - Found org.jetbrains.kotlin.platform.type 'jvm' but wasn't required.
          - Variant 'metadata-api' capability com.squareup.okio:okio:2.4.1:
              - Unmatched attributes:
                  - Found org.gradle.status 'release' but wasn't required.
                  - Found org.gradle.usage 'kotlin-api' but wasn't required.
                  - Found org.jetbrains.kotlin.platform.type 'common' but wasn't required.

和buildgradlekts片段

import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

plugins {
    id("org.springframework.boot") version "2.2.5.RELEASE"
    id("io.spring.dependency-management") version "1.0.9.RELEASE"
    kotlin("jvm") version "1.3.61"
    kotlin("plugin.spring") version "1.3.61"
}

group = "com.foo"
version = "0.0.1-SNAPSHOT"
java.sourceCompatibility = JavaVersion.VERSION_11

val developmentOnly by configurations.creating
configurations {
    runtimeClasspath {
        extendsFrom(developmentOnly)
    }
    compileOnly {
        extendsFrom(configurations.annotationProcessor.get())
    }
}

repositories {
    mavenCentral()
}

dependencies {
    implementation("org.springframework.boot:spring-boot-starter-web")
    implementation("com.fasterxml.jackson.module:jackson-module-kotlin")
    implementation("org.jetbrains.kotlin:kotlin-reflect")
    implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")

    compileOnly("org.projectlombok:lombok")
    developmentOnly("org.springframework.boot:spring-boot-devtools")
    annotationProcessor("org.projectlombok:lombok")

    implementation("com.squareup.okhttp3:okhttp:4.3.1")
    implementation("com.graphql-java-kickstart:graphql-spring-boot-starter:6.0.1")
    runtimeOnly("com.graphql-java-kickstart:graphiql-spring-boot-starter:6.0.1")
    runtimeOnly("com.graphql-java-kickstart:voyager-spring-boot-starter:6.0.1")

    testImplementation("io.cucumber:cucumber-java8:5.4.0")
    testImplementation("io.cucumber:cucumber-junit:5.4.0")
    testImplementation("org.springframework.boot:spring-boot-starter-test") {
        exclude(group = "org.junit.vintage", module = "junit-vintage-engine")
    }
}

tasks.withType<Test> {
    useJUnitPlatform()
}

tasks.withType<KotlinCompile> {
    kotlinOptions {
        freeCompilerArgs = listOf("-Xjsr305=strict")
        jvmTarget = "11"
    }
}

val cucumberRuntime by configurations.creating {
    extendsFrom(configurations["testImplementation"])
}

task("cucumber") {
    dependsOn("assemble")
    dependsOn("compileTestJava")
    doLast {
        javaexec {
            main = "io.cucumber.core.cli.Main"
            classpath = cucumberRuntime + sourceSets.main.get().output + sourceSets.test.get().output
            args = listOf("--plugin", "pretty", "--glue", "gradle.cucumber", "src/test/resources")
        }
    }
}



我和你有同样的问题 我会这样翻译提议的解决方案:

configurations.forEach {
        if (it.name.contains("kapt") || it.name.contains("wire") {
            attributes.attribute(Usage.USAGE_ATTRIBUTE, objects.named(Usage::class.java, "java-runtime"))
        }

    }

但是这个补丁并没有解决我的问题,因为我既没有
kapt
的配置,也没有
wire
的配置。看起来这一行是关键:

> Could not resolve all files for configuration ':cucumberRuntime'.
在我的例子中,这个名字对我来说很有用:“productionRuntimeClasspath”

你找到解决方案了吗?我遇到了同样的问题,似乎也找不到解决方案……:(唯一提到的解决方案是添加上面显示的子项目hack,但我无法将其从基于groovy的gradle文件转换为kotlin kts gradle文件-也许你可以试试? > Could not resolve all files for configuration ':cucumberRuntime'. > Could not resolve all task dependencies for configuration ':main:kapt'.
configurations.all {
    if (name.contains("cucumberRuntime")) {
        attributes.attribute(Usage.USAGE_ATTRIBUTE, objects.named(Usage::class.java, Usage.JAVA_RUNTIME))
    }
}