Geb-Spock 使用了错误的 Groovy 版本
Geb-Spock using wrong Groovy version
当我尝试使用以下方法创建功能测试时:
grails create-functional-test acceptance.tests.Logout
我收到这个错误,因为 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. 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
但是在我的项目中只有Groovy3是一个库。
这是我的 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)
这里是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
如何让 Spock(这是 Geb 的传递依赖)使用 Groovy 3(已经在我的类路径中)?
提前致谢。
快速检查显示 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. But it looks as if you cannot, see Geb issue #619。因此,您现在要坚持使用 Spock 1.3 和 Groovy 2.5。
对于 Grails 4.1.0.M2,grails create-functional-test acceptance.tests.Logout
起到了很大的作用。但我做了一些额外的步骤(以避免前沿,正如@kriegaex 在评论中所说)。
我所做的是:
- 已更新至 Grails 4.1.0.M2
- 回滚到 Gradle 5.1.1(推荐版本)
- 重新创建 gradle 包装器 (
gradle wrapper --gradle-version 5.1.1
)
- 继续 Groovy 3.0.6(3.0.3 导致依赖项不兼容)
- 其他所有内容都来自与 Grails 4.1.0.M2 相关的 Maven BOM(如我在问题中的
build.gradle
所见)
但问题是 Grails 4.1.0.M2 附带了 Spock 2.0-M2-groovy-3.0,它解决了 .
中指出的问题
此外,感谢@JeffScottBrow 在评论中提供的提示。
当我尝试使用以下方法创建功能测试时:
grails create-functional-test acceptance.tests.Logout
我收到这个错误,因为 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. 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
但是在我的项目中只有Groovy3是一个库。
这是我的 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)
这里是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
如何让 Spock(这是 Geb 的传递依赖)使用 Groovy 3(已经在我的类路径中)?
提前致谢。
快速检查显示 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. But it looks as if you cannot, see Geb issue #619。因此,您现在要坚持使用 Spock 1.3 和 Groovy 2.5。
对于 Grails 4.1.0.M2,grails create-functional-test acceptance.tests.Logout
起到了很大的作用。但我做了一些额外的步骤(以避免前沿,正如@kriegaex 在评论中所说)。
我所做的是:
- 已更新至 Grails 4.1.0.M2
- 回滚到 Gradle 5.1.1(推荐版本)
- 重新创建 gradle 包装器 (
gradle wrapper --gradle-version 5.1.1
) - 继续 Groovy 3.0.6(3.0.3 导致依赖项不兼容)
- 其他所有内容都来自与 Grails 4.1.0.M2 相关的 Maven BOM(如我在问题中的
build.gradle
所见)
但问题是 Grails 4.1.0.M2 附带了 Spock 2.0-M2-groovy-3.0,它解决了
此外,感谢@JeffScottBrow 在评论中提供的提示。