LoginSignup
11
10

More than 5 years have passed since last update.

JavaからGroovyのクラスを使用しているコードをGradleでコンパイルする

Posted at

問題

↓こんな構成のプロジェクトがあったとして、

|-build.gradle
`-src/main/
   |-java/sample
   |  `-JavaClass.java
   `-groovy/sample
      `-GroovyClass.groovy
JavaClass.java
package sample;

public class JavaClass {

    public static void main(String[] args) {
        new GroovyClass().method();
    }
}
GroovyClass.groovy
package sample

def class GroovyClass {
    def method() {
        println 'GroovyClass.method()'
    }
}

Java と Groovy で、それぞれクラスを定義して、 Java 側の実装が Groovy の実装を参照している、という構成。

これを Gradle でコンパイルするために ↓ のように build.gradle を記述したとする。

build.gradle
apply plugin: 'groovy'

repositories {
    mavenCentral()
}

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

コンパイルすると、 ↓ のようになる。

> gradle classes
:compileJava
F:\tmp\gradle\groovy\src\main\java\sample\JavaClass.java:6: エラー: シンボルを見つけられません
        new GroovyClass().method();
            ^
  シンボル:   クラス GroovyClass
  場所: クラス JavaClass
エラー1個
:compileJava FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':compileJava'.
> Compilation failed; see the compiler error output for details.

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

BUILD FAILED

Total time: 3.827 secs

Groovy のクラスが見つけられません、とエラーになる。

解決策

ググったら 、 ↓ のようにしないといけないらしい。

build.gradle
apply plugin: 'groovy'

repositories {
    mavenCentral()
}

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

sourceSets.main.java.srcDirs = []
sourceSets.main.groovy.srcDirs += 'src/main/java'

Java 側のソースセットを消して、 Groovy 側に追加する。

> gradle classes
:compileJava UP-TO-DATE
:compileGroovy UP-TO-DATE
:processResources UP-TO-DATE
:classes UP-TO-DATE

BUILD SUCCESSFUL

Total time: 3.423 secs

コンパイルできた。

11
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
10