我的项目有 Java(N 个文件)和 Groovy 代码(仅 1 个文件)。 Java 编译依赖于这个单个 Groovy 文件的类文件来进行 Java 编译(compileJava 任务成功)。
当我不使用 src/java 作为 main>groovy> sourceSet 部分中的 srcDir 之一时,我收到一条错误消息,指出 groovy 文件/类中未找到类/符号。在 ANT 中,我们很容易首先调用compile-groovy 目标,然后再调用compile-java 目标,但在Gradle 中我试图找到同样的情况。
我读了一些帖子,发现如果我将 main>java 部分设置为 NULL 并为 main>java 指定 srcDir,即 main>groovy sourceSet 部分中的 src/java ,那么它可以正常编译。
我的?:
1.还有其他办法吗?例如,以下内容应该有效:
compileJava {
dependsOn compileGroovy
}
但是,这会进入无限循环。
OR
使用 doFirst 执行compileJava 任务怎么样:
compileJava {
doFirst {
compileGroovy
}
}
这也行不通。
构建.gradle这是可行的,但从某种意义上说,compileJava在这里变得毫无用处,即使源代码有N个。 src/java 或 src/java-test 等树中的 java 文件。我知道这个构建脚本正在工作,但从逻辑上讲,如果开发人员不熟悉为什么 Groovy 的 sourceSet 必须将“src/java”作为其 srcDir 值,那么它可能会给开发人员带来一些困惑。
apply plugin: 'java'
apply plugin: 'groovy'
sourceSets {
main {
groovy {
srcDir 'src/groovy'
srcDir 'src/java'
}
java {
//The following needs to be commented out OR Gradle will always pick compileJava before compileGroovy
//srcDir 'src/java'
//srcDir 'src/java-test'
}
}
test {
groovy {
srcDir 'test/groovy'
}
java {
srcDir 'test/java'
}
resources {
srcDir 'test/resources'
srcDir 'conf'
}
}
integrationTest {
groovy {
srcDir 'src/groovy-test'
}
java {
srcDir 'src/java-test'
}
resources {
srcDir 'test/resources'
srcDir 'conf'
}
}
}
其他链接:如何让 Gradle 在 Java 测试之前编译 Groovy 测试