Android studio, gradle никогда не использует мое локальное репозиторий maven
-
21-12-2019 - |
Вопрос
Как я могу заставить 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.
Решение
Если вы хотите выполнить подстановку переменной ${...}, вам нужно использовать двойные кавычки (") вместо одинарных кавычек (').Двойные кавычки обозначают GStrings, которые могут это делать, но строки с одинарными кавычками всегда интерпретируются буквально.
Так:
repositories {
mavenCentral()
maven {
url "${HOME}/.m2/repository/"
}
}
Убедитесь, что вы поместили этот блок в файл сборки вашего модуля, а не в buildscript
блок файла сборки верхнего уровня;последнее определяет только, где найти плагин для Android, а не зависимости, зависящие от вашего модуля
Из-за неправильно процитированной строки он, вероятно, не видит ваш локальный репозиторий.Кроме того, другой вопрос о плагине, неявно добавляющем репозиторий Maven в ваш SDK, также верен.Это позволит определить зависимости от поддержки Android.
Одинарные и двойные кавычки Gradle содержит немного больше информации и ссылку, по которой вы можете перейти.
Другие советы
Я хочу прокомментировать ответ Скотта Барта, но у меня недостаточно репутации.
- $HOME у меня не работает (в CLI, а не в Android Studio), System.getenv('HOME') работает
- нет необходимости помещать блок repositories в файл build.gradle КАЖДОГО модуля, просто поместите блок внутри блока "allprojects" в build.gradle верхнего уровня (я научился этому здесь)
Итак, окончательное решение, которое я использую, - это:
// in the top-level build.gradle:
buildscript {
...
}
allprojects {
repositories {
mavenCentral()
maven { url System.getenv('HOME') + "/.m2/repository/" }
}
}
Когда ты это сделаешь
apply plugin: 'android'
плагин Android добавляет еще один репозиторий - тот, что находится под вашим SDK.Он содержит эти библиотеки поддержки и расширений. com.test:artifact:1.0
скорее всего, он взят из вашего локального репозитория Maven.