Gradle模块中的`rootProject`,它被导入到另一个项目中

时间:2016-03-04 11:28:47

标签: android gradle android-gradle build.gradle

在我目前的设置中,我有两个顶级Gradle项目

包含模块的库项目 onChangeMonthYear: function(){ // alert("Hii, I'm here"); }

  • VideoPresenter
  • videopresenter-common
  • videopresenter-exoplayer

videopresenter-visualonvideopresenter-exoplayer都取决于videopresenter-visualon

所有三个模块都依赖于OkHttp,因此我在顶级videopresenter-common中定义了一个版本变量:

build.gradle

我在其他三个ext { okhttp = 'com.squareup.okhttp3:okhttp:3.0.0-RC1' } 中使用

build.gradle

到目前为止,这完全类似于方式,例如,RxBinding已设置。只要我从这个项目中编译模块,它似乎就可以工作。

但是,我还有一个使用这些模块中的一个或多个的应用程序项目。假设该项目的dependencies { compile rootProject.ext.okhttp } 包含以下内容:

settings.gradle

现在,当我尝试编译应用程序项目Gradle抱怨因为它

  

无法在额外的属性扩展上获取属性'okhttp'   不存在

大概是因为include ':videopresenter-common' include ':videopresenter-exoplayer' project(':videopresenter-common').projectDir = new File('../VideoPresenterAndroid/videopresenter-common') project(':videopresenter-exoplayer').projectDir = new File('../VideoPresenterAndroid/videopresenter-exoplayer') 现在指向我的应用项目的顶级rootProject

如果我在那里添加属性,项目就会编译。但是,我不想将主项目中正确的版本号“注入”到库项目中。有没有办法集中声明库项目中的属性,以便在将模块导入另一个项目时也适用?

1 个答案:

答案 0 :(得分:1)

如果目标是从库中获取值,那么您可以获得库项目的rootProject,然后像之前一样引用ext。具体说明我们正在寻找的项目应该提供预期的结果。

dependencies {
    compile project(':videopresenter-common').rootProject.ext.okhttp
}

只要项目位于settings.gradle,您就应该能够引用它的扩展名。