gpt4 book ai didi

gradle - 构建时如何确保在编译之前生成代码?

转载 作者:行者123 更新时间:2023-12-03 04:04:19 25 4
gpt4 key购买 nike

我有一个 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
}

它输出:
:antlrOutputDir
:compileGeneratedJava UP-TO-DATE
:processGeneratedResources UP-TO-DATE
:generatedClasses UP-TO-DATE
:generateGrammarSource

以及大量缺失符号错误,因为源代码是在 compileGeneratedJava 之后生成的任务正在运行。为什么不添加 dependsOncompileJava 的行任务不强制它先有趣吗?

如果我运行 generateGrammarSource在它自己之前 run ,我现在得到错误,所以我知道代码生成工作正常。

我尝试了另一个 posted solution无济于事。我似乎无法将任务注入(inject)构建周期中的适当位置。我如何获得 generatedGrammarSource在编译步骤之前运行?

最佳答案

问题出在 sourceSets我设置的 block srcDirs .它应该是“src/generated/java”而不是“src/antlr/java”。错误直接列出导致 gradle 看不到生成的源。

关于gradle - 构建时如何确保在编译之前生成代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30684092/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com