Gradle 如何确保在编译之前生成代码?

Gradle 如何确保在编译之前生成代码?,gradle,antlr,Gradle,Antlr,我有一个build.gradle和以下代码: apply plugin: 'java' apply plugin: 'application' gradle.projectsEvaluated { tasks.withType(JavaCompile) { options.compilerArgs << "-Xlint:unchecked" } } ext.antlr = [ grammarpackage: "org.shirolang.i

我有一个
build.gradle
和以下代码:

apply plugin: 'java'
apply plugin: 'application'

gradle.projectsEvaluated {
    tasks.withType(JavaCompile) {
        options.compilerArgs << "-Xlint:unchecked"
    }
}

ext.antlr = [
    grammarpackage: "org.shirolang.interpreter",
    antlrSource: 'src/main/java/org/shirolang',
    destinationDir: "src/generated/java"
]

sourceSets{
    generated
    main{
        compileClasspath += generated.output
        runtimeClasspath += generated.output
    }
    test{
        compileClasspath += generated.output
        runtimeClasspath += generated.output
    }
}
project.run.classpath += sourceSets.generated.output

repositories {
    mavenCentral()
}

configurations {
    antlr4
}

sourceSets{
    main{
        java{
            srcDirs 'src/main/java', 'src/antlr/java'
        }
    }
}

dependencies {
    ...
}

task wrapper(type: Wrapper) {
    gradleVersion = '2.4'
}

tasks.withType(JavaCompile) {
    options.encoding = 'UTF-8'
}

task antlrOutputDir << {
    mkdir(antlr.destinationDir)
}

task generateGrammarSource(dependsOn: antlrOutputDir, type: JavaExec) {
   // code to generate a antlr grammar
}

compileJava {
    dependsOn generateGrammarSource
    classpath += sourceSets.generated.output
}
由于源代码是在运行
compileGeneratedJava
任务之后生成的,因此会出现大量缺少符号的错误。为什么不先将
dependsOn
行添加到
compileJava
任务中,让它变得有趣

如果在运行
run
之前自己运行
generateGrammarSource
,现在会出现错误,因此我知道代码生成工作正常


我又试了一次,但没有用。我似乎无法将任务注入构建周期中的适当位置。如何让
generatedGrammarSource
在编译步骤之前运行?

问题出在
sourceset
块中,我在其中设置
srcDirs
。它应该是“src/generated/java”,而不是“src/antlr/java”。直接列出的错误代码导致gradle看不到生成的源。

问题出现在我设置srcDirs属性的sourceSets块中。它应该是“src/generated/java”而不是“src/antlr/java”。Jeffrey,如果你的评论解决了你的问题,请随意回答并接受你自己的问题。忘了我可以这么做。将在2天等待期后接受答复。
:antlrOutputDir
:compileGeneratedJava UP-TO-DATE
:processGeneratedResources UP-TO-DATE
:generatedClasses UP-TO-DATE
:generateGrammarSource