在我目前的设置中,我有两个顶级Gradle项目:
包含模块的库项目 onChangeMonthYear: function(){
// alert("Hii, I'm here");
}
VideoPresenter
videopresenter-common
videopresenter-exoplayer
videopresenter-visualon
和videopresenter-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
。
如果我在那里添加属性,项目就会编译。但是,我不想将主项目中正确的版本号“注入”到库项目中。有没有办法集中声明库项目中的属性,以便在将模块导入另一个项目时也适用?
答案 0 :(得分:1)
如果目标是从库中获取值,那么您可以获得库项目的rootProject
,然后像之前一样引用ext
。具体说明我们正在寻找的项目应该提供预期的结果。
dependencies {
compile project(':videopresenter-common').rootProject.ext.okhttp
}
只要项目位于settings.gradle
,您就应该能够引用它的扩展名。