我有一种非常违反直觉的依赖项设置。我正在尝试编写一个gradle任务,该任务依赖于(并行)子项目的编译。问题在于,当我执行任务时,它将尝试编译根项目java / kotlin的源代码,在我的情况下会失败。
如何使任务依赖于子项目编译而又不导致根项目先编译?
这是我的项目结构
root-project/build.gradle
+-- parser/build.gradle
+-- lexer/build.gradle
我的lexer / build.gradle包含此任务
task regenerateParser(type: JavaExec) {
main 'org.intellij.grammar.Main'
classpath project(':parser').sourceSets.main.runtimeClasspath
def grammarFile = '../parser/schema/flatbuffers.bnf'
def targetRoot = '../parser/src/gen/java'
args targetRoot, grammarFile
}
但是,如果我打印任务图,就会得到类似这样的东西
:lexer:regenerateParser
+--- :classes
| +--- :compileJava
| | +--- :compileKotlin
| | | \--- :parser:jar
| | | +--- :parser:classes
| | | | +--- :parser:compileJava
| | | | | \--- :parser:compileKotlin
| | | | \--- :parser:processResources
| | | | \--- :parser:patchPluginXml
| | | +--- :parser:compileKotlin *
| | | +--- :parser:inspectClassesForKotlinIC
| | | | \--- :parser:classes *
| | | \--- :parser:postInstrumentCode
| | | \--- :parser:instrumentCode
| | | +--- :parser:classes *
| | | \--- :parser:compileKotlin *
| | \--- :parser:jar *
| \--- :processResources
| \--- :patchPluginXml
+--- :compileKotlin *
\--- :postInstrumentCode
\--- :instrumentCode
+--- :classes *
\--- :compileKotlin *
令我困惑的是,为什么:lexer:regenrateParser
依赖:classes
而不直接依赖:parser:jar
。如何使它依赖于:parser
而不是根项目?