gradle - 执行顺序问题

时间:2017-06-07 20:08:09

标签: gradle build.gradle

我有一个看起来像这样的项目。

root
    build.gradle
    settings.gradle
    project1
         build.gradle

    project2
         build.gradle

    project3
         build.gradle

    project4
         build.gradle

settings.gradle看起来像这样。

include ':project1', ':project2', ':project3', ':project4'

build.gradle(从root)

apply plugin: 'java'
apply plugin: 'eclipse'

repositories {
    mavenCentral()
}
dependencies {
    compile project(':project1')
    compile project(':project2')
    compile project(':project3')
    compile project(':project4')
} 

所以基本上,我想要' project1'在project2,3,4之前首先构建,因为它需要下载我们的内部依赖项(jar和一些模式文件),以便project2,3和4能够从模式文件(来自project1)中提取工件。

但是当我运行它时,我看到project1和3的标准输出在project1运行之前首先打印出来。

特别是project2包含许多运行此类参数的任务(类型:JavaExec)。

  main = 'org.apache.xmlbeans.impl.tool.SchemaCompiler'
  classpath "${BUILDROOT}/project1/${COMMON_DENEPDENCY_FILE}"
  args "-src", "${projectDir}/src/main/java", "-d", "build/generated", "-srconly", "${projectDir}/xml/schema/example1.xsd", "${projectDir}/xml/schema/example1.xsdconfig"

其中一项任务如下所示。我在project2中有几个任务看起来像这样。因此project1必须在project2和project3运行之前完全构建。

来自project2的build.gradle

task xmlbeansExample2(dependsOn: xmlbeansExample1, type: JavaExec) {
  println "Example2 is running"
  main = 'org.apache.xmlbeans.impl.tool.SchemaCompiler'
  classpath "${BUILDROOT}/common/${COMMON_DENEPDENCY_FILE}"
  args "-src", "${projectDir}/src/main/java", "-d", "build/generated", "-srconly", "${projectDir}/xml/schema/example2.xsd", "${projectDir}/xml/schema/example2.xsdconfig"
  println "Example2 is done"
}
task handleSchema(dependsOn: ['xmlbeansExample1', 'xmlbeansExample2'])

build.dependsOn handleSchema, jar

当我运行' gradle build'从root或project2,我首先看到来自project2的打印输出。

我的布局有问题吗?

我的团队正在从Ant迁移到Gradle,但gradle似乎与Ant执行有点不同。也许我对这个gradle有点误解。

1 个答案:

答案 0 :(得分:0)

嗯,对于root项目,不必将子模块指定为依赖项。

如果您的模块依赖于另一个模块,则应明确定义此依赖项。

// project2/build.gradle
dependencies {
    compile project(':project1')
}