首页 文章

如何解决Groovy错误“无法解析类spock.lang.Specification”?

提问于
浏览
0

我使用的是Ubuntu Linux 16,Gradle 2.10,Groovy 2.4.5和Java版本9.我需要它 . 我试图从GitHub运行这个程序 .

这是代码的文本:

package timezra.groovy.trampoline_memoize

import spock.lang.Specification

class RecursiveMemoizationSpec extends Specification {

    int count

    def fib = { n ->
        count++
        if(n == 0) 0
        else if(n == 1) 1
        else fib.call(n-1) + fib.call(n-2)
    }.memoize()

    def "calls should be cached"() {
        when:
        def actual = fib 10

        then:
        actual == 55
        count == 11
        // count == 177 //unmemoized
    }
}

当我运行它时

groovy RecursiveMemoizationSpec.groovy

我收到此错误:

/groovy-trampoline-memoize-specs/src/test/groovy/timezra/groovy/trampoline_memoize/RecursiveMemoizationSpec.groovy:3:无法解析类spock.lang.Specification @ line 3,第1列.import spock.lang.Specification ^ 1错误

该程序在不同的网站上引用 . 那些版本会产生同样的问题 . 我希望它没有这个错误 . 如何让上面的程序工作?

1 回答

  • 0

    这是一个非常古老的项目,它看起来并没有像7年那样被触及 . 你不应该丢弃gradle但是要学会如何使用它 . 检查构建文件,您可以看到它添加了Groovy(1.8.3)和spoc依赖项 . 由于这个项目没有gradle包装器,我会使用sdkman下载并安装gradle:

    https://sdkman.io/install

    然后我会从项目的根目录运行gradle测试 .

    您可能遇到的另一个问题是您正在运行Java 9. Groovy 1.8.3,可能无法在Java 9上运行 . 我知道Groovy已经在2.5.x版本中处理groovy 9兼容性,并且将会在3.0中添加更多语法支持 . 因此,您可以更新构建文件以使用从不版本的Groovy,或降级到Java 8.如果您安装sdkman,它还可以为您提供一种简单的方法来管理和动态切换Java版本 .

    如果你仍然想要摆脱gradle那么你将不得不使用Groovy @Grab注释,这将引入类似gradle的依赖:

    http://docs.groovy-lang.org/latest/html/documentation/grape.html

    但我建议您了解Gradle,因为它是一个强大的构建系统 .

相关问题