依赖于具有自身依赖性的项目(Gradle)

时间:2015-07-28 13:25:55

标签: android android-studio android-gradle

在使用Gradle的Android Studio中我ProjectA依赖于ProjectBProject B依赖于Project CProject D这样......

Project A .. Project B .. Project C .. Project D

使用当前的Gradle脚本,我得到以下错误

Error:(22, 0) Project with path ':ProjectC:app' could not be found in project ':ProjectB:app'.

文件夹结构

.\workspace
    \ProjectA
        \app
        \build
        \gradle  
        \.gradle
        \.idea
    \ProjectB (same as A)
    \ProjectC (same as A)
    \ProjectD (same as A)`

项目A settings.gradle

include ':app', ':ProjectB:app'
project (':ProjectB:app').projectDir = new File(settingsDir, '../ProjectB/app')

项目构建build.gradle

buildscript {
    repositories {
       jcenter()
    }
dependencies {
    classpath 'com.android.tools.build:gradle:1.2.3'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}
allprojects {
    repositories {
        jcenter()
    }
}

项目A模块build.gradle

android {
    compileSdkVersion 19
    buildToolsVersion "21.1.2"

    defaultConfig {
        applicationId "com.example.movetogradle"
        minSdkVersion 15
        targetSdkVersion 19
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile 'com.android.support:support-v4:19.1.0'
    compile project(path: ':ProjectB:app')        
}

项目B使用上述相同的方法知道它的依赖性C和D.

我对整个gradle场景都很陌生。显然在Eclipse(ANT)中,你只能说ProjectB是一个库。我们希望将它们保留为单独的项目而不是模块,因为当ProjectB中的代码更改时,所有使用B的项目都会使用它。

如果我添加对ProjectAProjectC的引用,我可以ProjectD构建ProjectB

如何让ProjectA依赖ProjectB而不必在ProjectB中声明所有ProjectA的依赖关系?

1 个答案:

答案 0 :(得分:0)

当Gradle多项目构建中包含另一个项目时,我非常确定不会为该项目读取settings.gradle文件。 (见the Gradle documentation, chapter 56.2) 在多项目构建中,您应该至少包含根settings.gradle文件中的所有必需项目,因此在这种情况下,ProjectA的settings.gradle我认为需要包含项目C和D命令构建工作。 A不需要声明任何更多依赖项,但Gradle需要知道项目才能构建它们。