【问题标题】:How do I troubleshoot the Groovy error "unable to resolve class spock.lang.Specification"?如何解决 Groovy 错误“无法解析类 spock.lang.Specification”?
【发布时间】:2018-12-08 20:40:53
【问题描述】:

我正在使用 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 @ line 3, column 1. 导入 spock.lang.Specification ^

1 个错误

这个程序在不同的网站上被引用。这些版本产生同样的问题。我希望它可以在没有此错误的情况下工作。如何让上面的程序运行?

【问题讨论】:

    标签: groovy


    【解决方案1】:

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

    https://sdkman.io/install

    然后我会从项目的根目录运行 gradle test。

    您可能遇到的另一个问题是您正在运行 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,因为它是一个强大的构建系统。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多