从根项目中的子项目获取依赖项

时间:2014-12-12 14:06:31

标签: java gradle dependencies

无法在根构建文件中获取子项目依赖项。由于某些原因,它们尚未初始化。 是否有可能从 project1 获取依赖项列表,例如 root 内部?

请参阅 copyToLib 任务。它应该从 project1 依赖关系部分返回值,但实际上并非如此。

Gradle版本是2.0

Root
|
|-project1
|    |-build.gradle
|-project2
|    |-build.gradle
|-core1
|    |-build.gradle
|-core2
|    |-build.gradle
|-build.gradle
|-settings.gradle

settings.gradle

include 'project1','project2','core1','core2'
rootProject.name="Root"

PROJECT1:的build.gradle

version = '0.1'
dependencies {
    compile project(':core1'),
            project(':core2'),
            'org.springframework:spring-web:4.0.6.RELEASE'
}

根:的build.gradle

subprojects{
    apply plugin: 'java'
    apply plugin: 'eclipse'
    apply from: "${rootProject.projectDir}/eclipse.gradle"
    sourceCompatibility = 1.7
    repositories {
         mavenCentral()
    }
    task copyToLib(type: Copy) {
        def deps = project.configurations.compile.getAllDependencies().withType(ProjectDependency)
        for ( dep in deps ) {
            println dep.getDependencyProject().projectDir
        }
    }
    build.dependsOn(copyToLib)
}

1 个答案:

答案 0 :(得分:1)

project中使用subprojects变量时,它指的是当前项目 - 在此特定情况下 - root。

您需要从subprojects闭包中删除添加任务,并添加以下代码:

subprojects.each { p ->
    configure(p) {
     task copyToLib << {
       def deps = p.configurations.compile.allDependencies.withType(ProjectDependency)
         for ( dep in deps ) {
           println dep.getDependencyProject().projectDir
         }
        }
        p.build.dependsOn(copyToLib)
    }
}

简化了任务(它不是Copy类型) - 您需要区分任务操作和配置。