我正在使用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个错误
该程序在其他网站上被引用。这些版本产生相同的问题。我希望它能正常工作而不会出现此错误。如何使上面的程序正常工作?
答案 0 :(得分:0)
这是一个非常古老的项目,看起来好像已经有7年没有触及了。您不应该丢弃gradle,而是学习如何使用它。检查构建文件,您可以看到它添加了Groovy(1.8.3)和spoc依赖项。由于该项目没有gradle包装器,因此我将使用sdkman下载并安装gradle:
然后我将从项目的根开始运行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,因为它是功能强大的构建系统。