我正在尝试通过gradle运行geb测试。我安装了这些
java version" 1.8.0_31"
Groovy版本:2.4.0
Gradle 2.3
但是我在运行测试时遇到了这个错误。
Exception in thread "main" java.lang.NoClassDefFoundError: java/util/HashMap$Ent
ry
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Class.java:2693)
使用上面的设置和下面的Build.gradle运行一个简单的groovy脚本就可以了。
Build.gradle看起来像这样:
buildscript {
repositories {
jcenter()
}
}
apply plugin: 'java'
apply plugin: 'groovy'
repositories {
jcenter()
mavenCentral()
}
dependencies {
def seleniumVersion = "2.45.0"
def phantomJsVersion = '1.1.0'
// selenium drivers
compile "org.seleniumhq.selenium:selenium-firefox-driver:$seleniumVersion"
compile "org.seleniumhq.selenium:selenium-support:$seleniumVersion"
compile("com.github.detro.ghostdriver:phantomjsdriver:$phantomJsVersion") {
transitive = false
}
// geb
compile 'org.codehaus.geb:geb-core:0.7.2'
compile 'org.codehaus.geb:geb-spock:0.7.2'
// spock
compile 'org.spockframework:spock-core:0.6-groovy-1.8'
//junit
testCompile group: 'junit', name: 'junit', version: '4.7'
}
task runGebScript (dependsOn: 'classes', type: JavaExec) {
main = 'test'
classpath = sourceSets.main.runtimeClasspath
}
有人可以帮忙。
答案 0 :(得分:1)
根据您包含的构建的Gradle依赖关系报告,用于testCompile
配置的Groovy版本为1.8.5。只有groovy 2.x兼容JDK8。我会按照ataylor的建议和碰撞Spock版本。如果你使用1.0-groovy-2.4那么你将使用Groovy 2.4.1。此外,我建议您更新Geb的版本 - 最新版本为0.10.0。你的依赖版本已经过时了。
答案 1 :(得分:0)
有些东西试图使用内部类HashMap.Entry
,它在Java 8中不再存在。如果没有完整的堆栈跟踪,很难分辨出来。
但是,您正在使用此版本的spock:org.spockframework:spock-core:0.6-groovy-1.8
。该版本与groovy 2.0+不兼容。尝试将依赖关系更新为org.spockframework:spock-core:1.0-groovy-2.4
。