如果我们有repo本地导入它,否则通过maven下载

时间:2017-09-21 22:14:12

标签: gradle android-gradle

我正在尝试更新我们的gradle脚本,看看我们是否有一个repo的本地实例。否则下载它。从本质上讲,我们开发人员不希望在我们在本地处理共享存储库时推送到maven。但是,作为我们部署管道的一部分,我们的工具需要将其拉出来。我们并不太担心回购陈旧。但是我不确定如何写这个陈述。

目前的解决方案是始终拉回购物。再一次,我们的目标是拥有更多的控制权,而不需要与我们的仓库同步。

configurations.all {
    // check for updates every build
    resolutionStrategy.cacheChangingModulesFor 0, 'seconds'
}

 compile ('com.aaaa.commons:1.2.3') { changing=true }

欲望

if(path/to/project exists){
  import the local dependency
}
else{
  compile ('com.aaaa.commons:1.2.3') { changing=true }
}

修改

问题是需要我将其作为模块导入。这实际上是将它应用到我的应用程序中。这正是我不想要的。如果我做了

include ':commons'
project(':commons').projectDir = new File(rootProject.projectDir,
    '/Users/asdasd/Repos/android-commons') 

我们得到了

   Error:Project :app declares a dependency from configuration 'compile' to configuration 'default' which is not declared in the descriptor for project :commons.

编辑编辑 我需要在文件树中再选择一个..我选择了我的库根。我需要公共资源而不是公共资源。

mymainproject
android-commons
    android-commons.iml
    build
    build.gradle
    **commons**

从那里我实际上无法使用该库,直到我编译它(注意我正在进行调试,因为释放将始终拉它)

 debugCompile project(path: ':commons')

1 个答案:

答案 0 :(得分:1)

我不时使用的一种简单方法:

try {
    compile project(':my-project')
} catch (UnknownProjectException) {
    compile 'com.aaaa.ooooo:1.2.3'
}

但是,我不确定使用resolutionStrategy是否有更好的解决方案。一个缺点:如果可以找到其他项目,则在将项目发布到存储库时不会将其添加为依赖项。

可能需要在setting.gradle文件中添加项目包含条件,如下所示:

if (new File(rootDir, 'my-project').isDirectory()) {
    include ':my-project'
}