在Gradle构建中使用Groovy类

8

我想在我的build.gradle文件中运行一个Groovy类。 我遵循使用指南中的说明,但是我收到了一个错误。

构建文件如下:

apply plugin: 'java'
apply plugin: 'groovy'

  main {
    java {
      srcDirs = ["$projectDir/src/java"]
    }
    groovy {
      srcDirs = ["$projectDir/src/groovy"]
    }
  }

    dependencies {
        compile 'org.codehaus.groovy:groovy-all:2.2.0', files(....)
    }

    task fooTask << {
        groovyClass groovyClass = new groovyClass()
        groovyClass.foo()
    }

这个Groovy类非常简单:

    public class groovyClass {

            public void foo() {
                    println 'foo'
            }
    }

然而,当我尝试运行gradlew compile fooTask时,我得到了以下错误:

无法解析类groovyClass

你有什么想法吗?

谢谢


我已经尝试了这篇帖子中提出的解决方案,但问题仍然存在。 - jonatzin
1个回答

25
如果您想从构建中引用它 (而不是在简单的 Exec 任务中) ,那么您需要将该类添加到 buildSrc。 假设有以下目录结构:
|-buildSrc
|    |- src
|        |- main
|            |- groovy
|                |- GroovyClass.groovy
|- build.gradle

GroovyClass.groovy 的位置:

class GroovyClass {
    void foo() {
        println 'foo'
    }
}

build.gradle 文件如下:

apply plugin: 'groovy'

dependencies {
    compile 'org.codehaus.groovy:groovy-all:2.2.1'
}

task fooTask << {
    GroovyClass g = new GroovyClass()
    g.foo()
}

然后,运行gradle fooTask将会输出:

$ gradle fooTask
:buildSrc:compileJava UP-TO-DATE
:buildSrc:compileGroovy UP-TO-DATE
:buildSrc:processResources UP-TO-DATE
:buildSrc:classes UP-TO-DATE
:buildSrc:jar UP-TO-DATE
:buildSrc:assemble UP-TO-DATE
:buildSrc:compileTestJava UP-TO-DATE
:buildSrc:compileTestGroovy UP-TO-DATE
:buildSrc:processTestResources UP-TO-DATE
:buildSrc:testClasses UP-TO-DATE
:buildSrc:test UP-TO-DATE
:buildSrc:check UP-TO-DATE
:buildSrc:build UP-TO-DATE
:fooTask
foo

BUILD SUCCESSFUL

Total time: 4.604 secs

2
你知道是否有一种方法可以更改gradle查找类的位置,以便它可以在src/main/groovy而不是buildSrc/src/main/groovy中查找吗? - jonatzin
据我所知没有。要运行构建,它必须首先运行构建,因此你会遇到鸡生蛋的局面。如果在buildSrc中对SRC中的Groovy文件创建符号链接,而且你不想维护两个文件,不确定是否有效? - tim_yates
Gradle会从你的build.gradle中的srcDirs获取你的Groovy源代码。将任何路径作为Gradle源目录即可开始使用。 - Louis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接