Студия Android, gradle никогда не использует мой локальный репозиторий maven

Как я могу получить gradle 1.10 для использования моего локального репозитория maven? Когда я запускаю свой gradle script, он всегда ищет артефакт в /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.

Ответ 1

Если вы хотите выполнить подстановку переменных $ {...}, вам нужно использовать двойные кавычки (") вместо одинарных кавычек ('). Двойные кавычки обозначают строки GStrings, которые могут это делать, но строки с одинарными кавычками всегда интерпретируются буквально.

Итак:

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

Убедитесь, что вы поместили этот блок в файл сборки модуля, а не в блок buildscript файла сборки верхнего уровня; последний только определяет, где найти плагин Android, а не ваши зависимые от модуля зависимости

Из-за неверно цитированной строки он, вероятно, не видит ваш локальный репозиторий. Кроме того, другой вопрос о плагине, неявно добавляющем репозиторий Maven в ваш SDK, также является правильным. Это подберет зависимости поддержки Android.

Gradle Single vs Double Quotes содержит немного больше информации и ссылку, по которой вы можете перейти.

Ответ 2

Я хочу прокомментировать ответ скотта Барта, но у меня недостаточно репутации.

  1. $ HOME не работает для меня (в CLI, а не в Android Studio), System.getenv('HOME') -
  2. нет необходимости помещать блок репозиториев в файл build.gradle КАЖДОГО модуля, просто поместите блок внутри блока "allprojects" в build.gradle верхнего уровня (я узнал об этом здесь)

Итак, последнее решение, которое я использую:

// in the top-level build.gradle:
buildscript {
    ...
}

allprojects {
    repositories {
        mavenCentral()
        maven { url System.getenv('HOME') + "/.m2/repository/" }
    }
}

Ответ 3

Когда вы это сделаете apply plugin: 'android'

Плагин android добавляет еще один репозиторий - тот, который находится под вашим SDK. Он содержит библиотеки поддержки и расширения. com.test:artifact:1.0, скорее всего, используется в виде локального репозитория Maven.