条件依赖性



在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

最新更新