简体   繁体   English

Geb-Spock 使用了错误的 Groovy 版本

[英]Geb-Spock using wrong Groovy version

When I try to create a functional test using:当我尝试使用以下方法创建功能测试时:

grails create-functional-test acceptance.tests.Logout

I'm getting this error, because Spock tries to use a wrong Groovy version:我收到此错误,因为 Spock 尝试使用错误的 Groovy 版本:

| | Error Failed to compile GenerateAsyncController.groovy: startup failed: Could not instantiate global transform class org.spockframework.compiler.SpockTransform specified at jar:file:/Users/reinaldoluckman/.gradle/caches/modules-2/files-2.1/org.spockframework/spock-core/2.0-M2-groovy-3.0/396867de1bbbe11e85e197c22f0e6de07643185a/spock-core-2.0-M2-groovy-3.0.jar!/META-INF/services/org.codehaus.groovy.transform.ASTTransformation because of exception org.spockframework.util.IncompatibleGroovyVersionException: The Spock compiler plugin cannot execute because Spock 2.0.0-M2-groovy-3.0 is not compatible with Groovy 2.5.6.错误无法编译 GenerateAsyncController.groovy:启动失败:无法实例化在 jar:file:/Users/reinaldoluckman/.gradle/caches/modules-2/files-2.1/org 中指定的全局转换类 org.spockframework.compiler.SpockTransform。 spockframework/spock-core/2.0-M2-groovy-3.0/396867de1bbbe11e85e197c22f0e6de07643185a/spock-core-2.0-M2-groovy-3.0.jar!/META-INF/services.groovy.org. .spockframework.util.IncompatibleGroovyVersionException:Spock 编译器插件无法执行,因为 Spock 2.0.0-M2-groovy-3.0 与 Groovy 2.5.6 不兼容。 For more information, see http://docs.spockframework.org Spock artifact: file:/Users/reinaldoluckman/.gradle/caches/modules-2/files-2.1/org.spockframework/spock-core/2.0-M2-groovy-3.0/396867de1bbbe11e85e197c22f0e6de07643185a/spock-core-2.0-M2-groovy-3.0.jar Groovy artifact: file:/Users/reinaldoluckman/.sdkman/candidates/grails/4.0.4/lib/org.codehaus.groovy/groovy/jars/groovy-2.5.6.jar有关更多信息,请参阅http://docs.spockframework.org Spock 工件:file:/Users/reinaldoluckman/.gradle/caches/modules-2/files-2.1/org.spockframework/spock-core/2.0-M2-groovy -3.0/396867de1bbbe11e85e197c22f0e6de07643185a/spock-core-2.0-M2-groovy-3.0.jar Groovy 工件:文件:/Users/reinaldoluckman/.sdkman/candidates.grails/.lib/4.0.org /groovy-2.5.6.jar

But in my project only Groovy 3 is a library.但在我的项目中,只有 Groovy 3 是一个库。

Here is my build.gradle:这是我的 build.gradle:


buildscript {
    repositories {
        jcenter()
        mavenCentral()
        mavenLocal()
        maven { url "https://plugins.gradle.org/m2/" }
        maven { url "https://repo.grails.org/grails/core" }
    }
    dependencies {
        classpath "org.grails:grails-gradle-plugin:$grailsVersion"
        classpath "com.bertramlabs.plugins:asset-pipeline-gradle:3.2.5"
        classpath "org.grails.plugins:hibernate5:${gormVersion - '.RELEASE'}"
        classpath "org.grails.plugins:views-gradle:2.1.0.M1"
        classpath "gradle.plugin.com.energizedwork.webdriver-binaries:webdriver-binaries-gradle-plugin:$webdriverBinariesVersion"
    }
}

plugins {
    id "com.moowork.node" version "1.1.1"
    id "com.github.ben-manes.versions" version "0.33.0"
}

version "0.1"
group "test_project"

apply plugin:"eclipse"
apply plugin:"idea"
apply plugin:"war"
apply plugin:"org.grails.grails-web"
apply plugin:"org.grails.grails-gsp"
apply plugin:"org.grails.plugins.views-json"
apply plugin:"asset-pipeline"
apply plugin:"io.spring.dependency-management"
apply plugin:"com.energizedwork.webdriver-binaries"

repositories {
    jcenter()
    mavenCentral()
    mavenLocal()
    maven { url "https://plugins.gradle.org/m2/" }
    maven { url "https://repo.grails.org/grails/core" }
}

dependencyManagement {
    imports {
        mavenBom "org.grails:grails-bom:$grailsVersion"
    }
    applyMavenExclusions false
}

configurations {
    developmentOnly
    runtimeClasspath {
        extendsFrom developmentOnly
    }
}

dependencies {

    developmentOnly("org.springframework.boot:spring-boot-devtools")

    implementation "org.springframework.boot:spring-boot-starter-logging"
    implementation "org.springframework.boot:spring-boot-autoconfigure"
    implementation "org.springframework.boot:spring-boot-starter-actuator"
    implementation "org.springframework.boot:spring-boot-starter-tomcat"
    implementation "org.grails:grails-dependencies"
    implementation "org.grails:grails-web-boot"
    implementation "org.grails:grails-core"
    implementation "org.grails:grails-datastore-rest-client:6.1.12.RELEASE"
    implementation "org.grails:grails-logging"
    implementation "org.grails.plugins:cache"
    implementation "org.grails.plugins:scaffolding"
    implementation "org.grails.plugins:hibernate5:${gormVersion - '.RELEASE'}"
    implementation "org.hibernate:hibernate-ehcache"
    console "org.grails:grails-console"
    profile "org.grails.profiles:web"
    runtime("org.springframework.boot:spring-boot-properties-migrator")
    runtime "com.bertramlabs.plugins:asset-pipeline-grails:3.2.5"
    runtime "com.h2database:h2"

    testImplementation "org.grails:grails-gorm-testing-support:$testingVersion"
    testImplementation "org.grails:grails-web-testing-support:$testingVersion"
    testImplementation "org.grails.plugins:geb"
    testRuntime "org.seleniumhq.selenium:selenium-chrome-driver:$seleniumVersion"
    testRuntime "org.seleniumhq.selenium:selenium-firefox-driver:$seleniumVersion"
    testRuntime "org.seleniumhq.selenium:selenium-safari-driver:$seleniumSafariDriverVersion"
    testImplementation "org.seleniumhq.selenium:selenium-remote-driver:$seleniumVersion"
    testImplementation "org.seleniumhq.selenium:selenium-api:$seleniumVersion"
    testImplementation "org.seleniumhq.selenium:selenium-support:$seleniumVersion"

    implementation "com.github.jsimone:webapp-runner:9.0.27.1"
    implementation "org.grails.plugins:spring-security-core:4.0.2"
    implementation "org.grails.plugins:spring-security-rest:3.0.1"
    implementation "org.grails.plugins:postgresql-extensions:5.3.0"
    implementation "org.grails.plugins:views-json:2.1.0.M1"
    implementation "org.grails.plugins:mail:3.0.0"
    implementation 'io.github.http-builder-ng:http-builder-ng-core:1.0.3'
    runtime "org.postgresql:postgresql:42.2.11"

    // Para tirar os warnings do application.yml
    implementation "org.springframework.boot:spring-boot-configuration-processor"
}

webdriverBinaries {
    chromedriver "$chromeDriverVersion"
    geckodriver "$geckodriverVersion"
}

tasks.withType(Test) {
    systemProperty "geb.env", System.getProperty('geb.env')
    systemProperty "geb.build.reportsDir", reporting.file("geb/integrationTest")
    systemProperty "webdriver.chrome.driver", System.getProperty('webdriver.chrome.driver')
    systemProperty "webdriver.gecko.driver", System.getProperty('webdriver.gecko.driver')
}

springBoot {
    mainClassName = 'test_project.Application'
}

bootRun {
    jvmArgs('-Dspring.output.ansi.enabled=always')
    sourceResources sourceSets.main
}


assets {
    minifyJs = true
    minifyCss = true
    includes = ["fonts/*"]
}

processResources.dependsOn(['npmInstall', 'npm_run_bundle'])
assetCompile.dependsOn(['npmInstall', 'npm_run_bundle'])


task stage() {
    dependsOn clean, war
}

tasks.stage.doLast() {
    delete fileTree(dir: "build/distributions")
    delete fileTree(dir: "build/assetCompile")
    delete fileTree(dir: "build/distributions")
    delete fileTree(dir: "build/libs", exclude: "*.war")
}
war.mustRunAfter clean

task copyToLib(type: Copy) {
    into "$buildDir/server"
    from(configurations.compile) {
        include "webapp-runner*"
    }
}

stage.dependsOn(copyToLib)


Here is gradle.properties:这是 gradle.properties:

grailsVersion=4.1.0.M2
groovyVersion=3.0.6
gormVersion=7.1.0.M2
gradleWrapperVersion=6.6.1
testingVersion=2.2.0.M2
gebVersion=3.4
seleniumVersion=3.12.0
webdriverBinariesVersion=1.4
chromeDriverVersion=86.0.4240.22
geckodriverVersion=0.23.0
seleniumSafariDriverVersion=3.14.0

How can I make Spock (that is a transitive dependency from Geb) to use the Groovy 3 (that is already in my classpath)?如何让 Spock(这是来自 Geb 的传递依赖项)使用 Groovy 3(已经在我的类路径中)?

Thanks in advance.提前致谢。

A quick check shows that the current master of Geb still depends on spock-1.3-groovy-2.5, so I am not sure if you can use Geb with Spock 2.0.快速查看一下,目前Geb的master还是依赖于spock-1.3-groovy-2.5,所以我不确定你是否可以在Spock 2.0中使用Geb。 But it looks as if you cannot, see Geb issue #619 .但看起来好像不能,请参阅Geb 问题 #619 Consequently, you want to stick with Spock 1.3 and Groovy 2.5 for now.因此,您现在希望坚持使用 Spock 1.3 和 Groovy 2.5。

With Grails 4.1.0.M2, grails create-functional-test acceptance.tests.Logout worked as a charm.在 Grails 4.1.0.M2 中, grails create-functional-test acceptance.tests.Logout testacceptance.tests.Logout 发挥了巨大grails create-functional-test acceptance.tests.Logout But I did some extra steps (to avoid bleeding edge, as @kriegaex says in comments).但我做了一些额外的步骤(为了避免前沿问题,正如@kriegaex 在评论中所说)。

What I did was:我所做的是:

  1. Updated to Grails 4.1.0.M2更新到 Grails 4.1.0.M2
  2. Rolled back to Gradle 5.1.1 (recommended version)回滚到 Gradle 5.1.1(推荐版本)
  3. Recreated gradle wrapper ( gradle wrapper --gradle-version 5.1.1 )重新创建的 gradle 包装器( gradle wrapper --gradle-version 5.1.1
  4. Continued with Groovy 3.0.6 (3.0.3 gave a dependency incompatibility)继续使用 Groovy 3.0.6(3.0.3 给出了依赖不兼容)
  5. Everything else came from Maven BOM associated with Grails 4.1.0.M2 (as saw in my build.gradle in my question )其他所有内容都来自与 Grails 4.1.0.M2 相关的 Maven BOM(如我的问题中的build.gradle

But the gotcha is that Grails 4.1.0.M2 comes with Spock 2.0-M2-groovy-3.0, that solves the problem pointed out in @kriegaex answer .但问题是 Grails 4.1.0.M2 附带 Spock 2.0-M2-groovy-3.0,它解决了@kriegaex answer 中指出的问题。

Also, thanks for @JeffScottBrow for the tips in the comments.另外,感谢@JeffScottBrow 在评论中提供的提示。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM