使用gradle 2.3运行geb测试 - HashMap $ Entry异常

时间:2015-03-30 15:33:40

标签: groovy gradle geb

我正在尝试通过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
}

有人可以帮忙。

2 个答案:

答案 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