在不执行根项目编译的情况下,任务如何能够依赖子项目编译?

时间:2019-09-08 19:41:15

标签: java gradle subproject

我有一种非常违反直觉的依赖项设置。我正在尝试编写一个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而不是根项目?

0 个答案:

没有答案