#問題
↓こんな構成のプロジェクトがあったとして、
|-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
コンパイルできた。