Зависимости Maven от Android Studio/Gradle
Я использую систему сборки Gradle в комплекте с Android Studio. До сих пор я мог создавать многопроектные настройки, используя зависимости, которые хранятся в моей структуре проекта. Теперь я хотел бы использовать зависимость maven, но безрезультатно. Я написал очень простой файл build.gradle, который всегда терпит неудачу:
buildscript {
repositories {
maven { url 'http://repo1.maven.org/maven2' }
}
dependencies {
classpath 'com.android.tools.build:gradle:0.4'
}
}
apply plugin: 'android'
dependencies {
compile 'com.google.android:support-v4:r7'
}
android {
compileSdkVersion 17
buildToolsVersion "17.0.0"
defaultConfig {
minSdkVersion 7
targetSdkVersion 16
}
}
со следующим сообщением:
* What went wrong:
A problem occurred configuring project ':absabs'.
> Failed to notify project evaluation listener.
> Could not resolve all dependencies for configuration ':absabs:compile'.
> Could not find com.google.android:support-v4:r7.
Required by:
absabs:absabs:unspecified
....
Caused by: org.gradle.api.internal.artifacts.ivyservice.ModuleVersionNotFoundException: Could not find com.google.android:support-v4:r7.
Это происходит с любым артефактом, который я пробовал до сих пор. Любая идея о том, что не так?
Спасибо
Ответы
Ответ 1
Блок "репозитории" в секции buildscript применим только к среде сборки. Вам также необходимо указать, какой репозиторий использовать при разрешении зависимостей для создания вашего проекта, поэтому вам нужно добавить в файл build.gradle что-то вроде следующего:
repositories {
mavenCentral()
}
Ваш полный файл будет выглядеть примерно так:
buildscript {
repositories {
maven { url 'http://repo1.maven.org/maven2' }
}
dependencies {
classpath 'com.android.tools.build:gradle:0.4'
}
}
apply plugin: 'android'
repositories {
mavenCentral()
}
dependencies {
compile 'com.google.android:support-v4:r7'
}
android {
compileSdkVersion 17
buildToolsVersion "17.0.0"
defaultConfig {
minSdkVersion 7
targetSdkVersion 16
}
}
Обратите внимание на два экземпляра "репозиториев". Вы можете узнать больше о том, что на самом деле означает gradle docs.
Ответ 2
Кажется, что текущая версия Android Studio не сразу забирает новые зависимости. Попробуйте перезапустить IDE.
Изменить:
Это не требуется для Android Studio >= 0.1.4v. Он работает в действии Sync Project with Gradle file
. Вы можете найти его под Tools > Android > Sync Project with Gradle file
или просто кнопкой на панели инструментов.
Ответ 3
http://tools.android.com/tech-docs/new-build-system/user-guide
Примечание. Это влияет только на код, выполняющий сборку, а не на проект. Сам проект должен объявить свои собственные репозитории и зависимости. Это будет рассмотрено позже.
Итак, вы должны объявить
repositories {
mavenCentral()
}
в области вашего проекта еще раз.
Ответ 4
Я сделал это следующим образом:
В Top build.gradle(Project: YourProject) Я добавил:
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.h2database:h2:1.4.187'
//NOTE: you can get the latest version in http://mvnrepository.com/artifact/com.h2database/h2
}
}
allprojects {
repositories {
jcenter()
mavenCentral()
}
}
ПРИМЕЧАНИЕ. Я добавил это вместе с предопределенными репозиториями jcenter().
И затем для моего файла app/build.gradle я добавил какую-либо библиотеку или зависимость, в которой я нуждался:
dependencies {
....//Add dependency here
}
Ответ 5
Maven
Maven продолжает использовать XML в качестве формата для записи спецификации сборки. Однако структура диаметрально отличается. У Maven есть свои проблемы. Менеджеры зависимостей не справляются с хорошими конфликтами между разными версиями одной и той же библиотеки (что-то гораздо лучше подходит Ivy). XML как формат конфигурации сборки строго структурирован и высоко стандартизирован. Настройка целей (целей) сложна. Поскольку Maven сосредоточен в основном на управлении зависимостями, сложные, настраиваемые скрипты сборки на самом деле сложнее писать в Maven, чем в граделе.