我有一个看起来像这样的项目。
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(从根目录开始)
apply plugin: 'java'
apply plugin: 'eclipse'
repositories {
mavenCentral()
}
dependencies {
compile project(':project1')
compile project(':project2')
compile project(':project3')
compile project(':project4')
}
所以基本上,我希望首先在project2、3、4之前构建“project1”,因为它需要下载内部依赖项(jar和一些模式文件),以便project2、3和4能够从模式中提取 Artifact 。文件(来自project1)。
但是当我运行它时,我看到project2运行之前先打印了project2和3的标准输出。
特别是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中有几个看起来像这样的任务。因此必须在project2和project3运行之前完全构建project1。
来自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
当我从根目录或project2运行“gradle build”时,我首先看到了project2的打印输出。
我的布局有问题吗?
我的团队正在从Ant迁移到Gradle,但是gradle似乎与Ant的执行有所不同。也许我对gradle不太了解。
最佳答案
好了,对于根项目,没有必要将子模块指定为依赖项。
如果您的模块依赖于另一个模块,则应明确定义此依赖关系。
// project2/build.gradle
dependencies {
compile project(':project1')
}