1

我正在使用带有 gradle 的 codenarc 1.4 来测试 Jenkins 共享库中的 groovy 代码,但是在运行它时输出错误说它无法解决,groovy.lang.Closure尽管这似乎并没有阻止运行检查。

遇到问题的代码示例是

interface IStepExecutor {
    int sh(String command)
    void dir(String path, Closure commands)
    ...

运行 codenarc 时会产生以下错误:

file:/.../IStepExecutor.groovy: 8: unable to resolve class Closure 
 @ line 8, column 27.
       void dir(String path, Closure commands)
                             ^

我的 gradle 配置的 codenarc 部分如下:

dependencies {
    compile 'org.codehaus.groovy:groovy-all:2.5.7'
    testCompile "org.spockframework:spock-core:1.3-groovy-2.5"
}
codenarc {
    toolVersion = "1.4"
}
codenarcMain {
    configFile = file("config/codenarc/CodeNarcMain.groovy")
    source = 'src'
    compilationClasspath += files('src/')
}
codenarcTest {
    configFile = file("config/codenarc/CodeNarcMain.groovy")
    source = 'src'
    compilationClasspath += files('src/')
}

import groovy.lang.Closure我可以通过添加一个但会导致UnnecessaryGroovyImport规则出错来停止错误消息。有没有办法在不删除规则的情况下防止报告这些错误UnnecessaryGroovyImport

4

1 回答 1

5

我还在使用 CodeNarc 和 Gradle 进行 Jenkins 共享库测试,发现将以下内容添加到我的 Gradle 配置中修复了类似的问题:

codenarcMain {
    compilationClasspath = sourceSets.main.compileClasspath + sourceSets.main.output
}

codenarcTest {
    compilationClasspath = codenarcMain.compilationClasspath + sourceSets.test.compileClasspath + sourceSets.test.output
}

我在 GitHub 上对 CodeNarc 问题的评论中发现了这一点。

我认为问题在于每个文件都被隔离编译以进行静态分析,这与 Gradle 中的正常编译步骤不同。我对此很陌生,所以可能会误解它。

于 2020-10-29T12:17:55.363 回答