Android studio,gradle从不使用我当地的maven repo

时间:2014-07-29 12:53:04

标签: gradle android-studio

如何使用gradle 1.10来使用我的本地maven存储库?当我运行我的gradle脚本时,它总是在/Applications/Android Studio.app/sdk/extras/android/m2repository/而不是${HOME}/.m2/repository/

中查找工件

在build.gradle中,我尝试过:

repositories {
    mavenCentral()
    mavenLocal()
 }

并尝试了这个:

repositories {
    mavenCentral()
    maven {
        url '${HOME}/.m2/repository/'
    }
 }

然后我有一个依赖项,它位于我的本地.m2存储库中:

dependencies {
    compile 'com.android.support:support-v4:20.0.+'
    compile 'com.android.support:appcompat-v7:20.0.+'
    compile 'com.google.android.gms:play-services:4.0.30'
    compile 'com.profferapp:proffer_dto_customer_android:1.0'
    compile 'com.test:artifact:1.0' // this is in my .m2 repository
}

这些配置都不指向我的本地maven存储库。

3 个答案:

答案 0 :(得分:10)

如果您想进行$ {...}变量替换,则需要使用双引号(")而不是单引号(')。双引号表示GStrings,它可以做到这一点,但带单引号的字符串总是按字面解释。

所以:

repositories {
    mavenCentral()
    maven {
        url "${HOME}/.m2/repository/"
    }
 }

确保将此块放在模块的构建文件中,而不是顶级构建文件的buildscript块中;后者只决定在哪里找到Android插件,而不是特定于模块的依赖

由于错误引用字符串,它可能无法看到您的本地存储库。另外,关于插件隐式在SDK中添加Maven repo的另一个问题也是正确的。这将获得Android支持依赖项。

Gradle Single vs Double Quotes有更多信息和您可以关注的链接。

答案 1 :(得分:6)

我想对Scott Barta的回答发表评论,但我没有足够的声誉。

  1. $ HOME不适合我(在CLI中,而不是Android Studio),System.getenv('HOME')
  2. 没有必要将存储库块放入每个模块的build.gradle文件中,只需将块放在顶级build.gradle中的“allprojects”块中(我学会了here
  3. 所以,我使用的最终解决方案是:

    // in the top-level build.gradle:
    buildscript {
        ...
    }
    
    allprojects {
        repositories {
            mavenCentral()
            maven { url System.getenv('HOME') + "/.m2/repository/" }
        }
    }
    

答案 2 :(得分:4)

当你这样做的时候 apply plugin: 'android'

android插件添加了另一个存储库 - SDK下的存储库。它包含那些支持和扩展库。 com.test:artifact:1.0可能来自您当地的Maven存储库。