В моем проекте есть файлы Java (N) и Groovy (только 1 файл). Компиляция Java зависит от этого одиночного файла класса файлов Groovy для компиляции Java (задача compileJava для успеха).
Когда я не использую src/java в качестве одного из srcDir в основном разделе > groovy > sourceSet, я получаю сообщение об ошибке, в котором не найден класс/символ, который находится в файле/классе Groovy. В ANT легко, что мы сначала вызываем compile- groovy, прежде чем вызывать цель компиляции-java, но то же самое в Gradle - это то, что я пытаюсь найти.
Я прочитал несколько сообщений и обнаружил, что если я сделаю основной раздел > java NULL и задаю srcDir для main > java, который является src/java внутри основного разделa > groovy sourceSet, тогда он компилируется отлично.
Мое: 1. Есть ли другой способ? например, должно работать следующее:
compileJava {
dependsOn compileGroovy
}
хотя это относится к циклу infinte.
ИЛИ
как насчет использования doFirst для задачи compileJava:
compileJava {
doFirst {
compileGroovy
}
}
это тоже не работает.
build.gradle. Это работает, но compileJava в некотором смысле становится бесполезным здесь, хотя исходный код имеет N нет. java файлов в дереве src/java или src/java-test и т.д. Я знаю, что эта сборка script работает, но логически может привести к некоторой путанице с разработчиком, если он/она не знакомы, почему sourceSet для Groovy ДОЛЖЕН иметь "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 компилировать Groovy тесты перед испытаниями Java