【发布时间】:2014-01-24 02:04:44
【问题描述】:
在 Gradle 上(更具体地说是 Android)我怎样才能有条件依赖,以便像这样从父项目加载它们:
compile project(':lib')
或来自存储库的父项目中不存在:
compile 'com.sample:lib:+'
我想到的一个可能的解决方案是这样做:
compile allprojects.find({ it.name.equal('lib')}) != null ? project(':lib') : 'com.sample:lib:+'
但 allProjects 属性在依赖项任务中不可用。
更新:
我之所以寻找这个是因为我们有两种设置,一种是从开发机器上的不同 git 存储库导入我们的子项目,另一种是从我们的依赖项服务器导入依赖项以用于 CI。
我尝试过的另一种方法是在父项目中设置:
ext.projectNames = allprojects.collect{ it.name }
在子项目中我正在这样做:
compile projectNames.contains('lib') ? project(':lib') : 'com.sample:lib:+'
这可行,但是由于在当前设置中我们只运行 CI 服务器中的一个子项目,因此该属性将不存在并且会失败,因此可能必须将此行为提取到插件中,并可能使用 getParent()
【问题讨论】:
-
为什么你希望依赖是有条件的,在构建文件评估时解决?你能更详细地了解你想要做什么吗?必须有更好的解决方案。
-
问“为什么?”当有人问“谁?”有点完全回避这个问题。我想知道如何煮豆子,而不是如果我有鹰嘴豆我能做什么;)但无论如何我已经更新了这个问题。
标签: java android gradle android-studio