在gradle上(更具体地使用Android),我如何具有有条件的依赖性,以便从父母项目中加载它们:
compile project(':lib')
或从存储库中不存在父级项目:
compile 'com.sample:lib:+'
我想到的一种可能的解决方案是这样做:
compile allprojects.find({ it.name.equal('lib')}) != null ? project(':lib') : 'com.sample:lib:+'
但是,依赖项任务中没有AllProjects属性。
更新:
我要搜索此问题的原因是因为我们有两个设置,一个设置,我们的子项目从开发机上的不同git存储库中导入,第二个是从我们的依赖关系服务器中导入依赖服务器的第二个。
。我尝试过的一种替代方案是在父项目中设置此问题:
ext.projectNames = allprojects.collect{ it.name }
,在subproject中,我正在这样做:
compile projectNames.contains('lib') ? project(':lib') : 'com.sample:lib:+'
这起作用,但是由于在当前设置中,我们仅运行CI服务器中的一个子标记,并且将不存在,因此可能必须将此行为提取到插件,也许可以使用GetParent()播放()
我需要相同的功能。让它与Gradle一起工作是一个束缚。困难的部分是弄清楚Android Studio如何同步Gradle文件。没有成功的同步,IDE将抱怨它找不到任何依赖性。无论如何,我都知道了,这是我与Gradle和Android Studio一起使用的解决方案。
https://gist.github.com/vangorra/c1383c3555ce8fe56adf8
它基本上归结为在设置中定义项目:
include 'library'
project(':library').projectDir = file('../Library/library')
然后,您必须使用一个单线仪,其中包含选项的依赖性:
compile ( project(':library').projectDir.exists() ? project(':library'): 'Library:library:unspecified@aar') {
transitive = true
}
动态解析项目依赖性或外部依赖性尚不是一流的Gradle功能,并且在构建中实现它需要一些努力(并且可能会产生一些限制)。您可以在此处找到一个证明:https://github.com/pniederw/elastic-deps
ps:是allprojects
,而不是allProjects
。