Gradle - Dependência de classes Groovy e Java - Compilar

Meu projeto possui código Java (N arquivos) e Groovy (apenas 1 arquivo). A compilação Java depende do arquivo de classe desse arquivo Groovy para compilação Java (tarefa compileJava para ser bem-sucedida).

Quando eu não uso o src / java como um dos srcDir na seção principal> groovy> sourceSet, recebo um erro dizendo que a classe / símbolo não encontrado está no arquivo / classe do groovy. No ANT, é fácil chamarmos o destino de compilação-groovy primeiro, antes de chamar o destino de compilação-java, mas o mesmo em Gradle é o que estou tentando encontrar.

Eu li alguns posts e descobri que, se eu criar a seção main> java NULL e especificar srcDir para main> java, que é src / java na seção main> groovy sourceSet, ele compila bem.

Meus? S: 1. Existe alguma outra maneira de fazer? por exemplo, o seguinte deve funcionar:

   compileJava {
     dependsOn compileGroovy
   }

no entanto, isso vai para um loop infinito.

OU

que tal usar o doFirst para a tarefa compileJava:

compileJava {
      doFirst {
            compileGroovy
      }
}

isso também não funciona.






build.gradle Isso funciona, mas compilar o Java em um sentido se torna inútil aqui, mesmo que o código-fonte tenha N não. de arquivos java na árvore src / java ou src / java-test etc. Eu sei que esse script de compilação está funcionando, mas logicamente isso pode trazer alguma confusão ao desenvolvedor se ele não estiver familiarizado por que o sourceSet for Groovy DEVE ter "src / java" como seu valor 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'
      }
   }
}

Outros links:Como fazer o Gradle compilar testes Groovy antes de testes Java

questionAnswers(1)

yourAnswerToTheQuestion