我正在尝试更新我们的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')
答案 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'
}