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

时间:2018-12-08 20:40:54

标签: groovy

我正在使用Ubuntu Linux 16,Gradle 2.10,Groovy 2.4.5和Java版本9。如果不需要,我想删除Gradle。我正在尝试从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 @第3行,列   1.导入spock.lang.Specification ^

     

1个错误

该程序在其他网站上被引用。这些版本产生相同的问题。我希望它能正常工作而不会出现此错误。如何使上面的程序正常工作?

1 个答案:

答案 0 :(得分:0)

这是一个非常古老的项目,看起来好像已经有7年没有触及了。您不应该丢弃gradle,而是学习如何使用它。检查构建文件,您可以看到它添加了Groovy(1.8.3)和spoc依赖项。由于该项目没有gradle包装器,因此我将使用sdkman下载并安装gradle:

https://sdkman.io/install

然后我将从项目的根开始运行gradle测试。

您可能遇到的另一个问题是您正在运行Java9。Groovy 1.8.3,可能无法在Java 9上运行。我知道Groovy在2.5.x版本中一直在致力于groovy 9+兼容性。 ,并将在3.0中添加更多语法支持。因此,您可以更新构建文件以使用Groovy的从不版本,也可以降级到Java8。如果您安装sdkman,它也将为您提供一种简便的管理方式,并可以即时切换Java版本。

如果您仍然真的想摆脱gradle,则必须使用Groovy @Grab批注,该批注将引入类似于gradle的依赖项:

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

但是我建议您了解Gradle,因为它是功能强大的构建系统。