Gradle Задача Maven для установки "установить" не работает с проектом библиотеки Android
Я хочу установить проект библиотеки андроида в локальный репозиторий maven.
Вот build.gradle:
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.5.+'
}
}
apply plugin: 'android-library'
apply plugin: 'maven'
version = "1.0.0-SNAPSHOT"
group = "com.example"
repositories {
mavenCentral()
}
android {
compileSdkVersion 18
buildToolsVersion "17.0.0"
defaultConfig {
minSdkVersion 9
targetSdkVersion 18
}
}
Когда я запускаю:
gradle install -i
он застрял здесь:
Executing task ':project:installTest' due to:
Task has not declared any outputs.
Starting process 'command 'd:\android-sdk-windows\platform-tools\adb.exe''. Working directory: D:\Projects\java\....... Command: d:\android-sdk-windows\platform-tools\adb.exe install -r D:\Projects\java\.......\build\apk\project.apk
An attempt to initialize for well behaving parent process finished.
Successfully started process 'command 'd:\android-sdk-windows\platform-tools\adb.exe''
> Building > :project:installTest
Итак, первое, что я заметил, это то, что он пытается по какой-то нечетной причине развернуть его на устройстве как APK.
Я делаю что-то неправильно или это просто плагин Android-библиотеки, не совместимый с плагином maven?
Ответы
Ответ 1
Изменить: Обратитесь к странице github (https://github.com/dcendents/android-maven-gradle-plugin) для получения последних инструкций и поиска правильных версия для использования. Оригинальные инструкции больше не подходят с последней версией gradle.
Оригинальное сообщение:
Я изменил плагин maven для совместимости с проектами библиотеки Android. См. Проект в github: https://github.com/dcendents/android-maven-gradle-plugin
Настройте ваши проекты библиотек Android для его использования:
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.github.dcendents:android-maven-plugin:1.0'
}
}
apply plugin: 'android-library'
apply plugin: 'android-maven'
Затем вы сможете установить aar в локальный репозиторий maven с помощью задачи установки.
Надеюсь, что это поможет, если вы найдете проблемы с плагином, сообщите мне об этом на github, и я исправлю это.
Ответ 2
Разрабатывая ответ CyclingSir, я предлагаю добавить отдельную задачу "installArchives". Это также должно заботиться о том, чтобы собирать ваши артефакты (например, источники).
apply plugin: 'maven'
task installArchives(type: Upload) {
description "Installs the artifacts to the local Maven repository."
configuration = configurations['archives']
repositories {
mavenDeployer {
repository url: repositories.mavenLocal().url
}
}
}
Обратите внимание, что с Gradle Android-плагином v0.5.5 gradle install
все еще пытается установить что-то на устройство.
Ответ 3
Там проще, если вы не хотите использовать пользовательский плагин. Вместо этого просто заново создайте задачу установки с другим именем. Я назвал его installArchives
. Добавьте следующий код в свой build.gradle
:
task installArchives(type: Upload) {
description "Installs the artifacts to the local Maven repository."
repositories.mavenInstaller {
configuration = configurations.default
pom.groupId = 'my.group'
pom.artifactId = 'my-artifact'
pom.version = '1.0.0'
}
}
Теперь вы можете запустить gradle installArchives
, чтобы установить локальную локальную сеть.
Ответ 4
ОБНОВЛЕНИЕ 2014-11-26
Ответ ниже имел смысл на момент написания, когда Android Build Tools находились в версии 0.5.5. Скорее всего, он устарел и, вероятно, больше не работает.
Я лично переключил свои проекты на использование android-maven-plugin
, как описано в ответе выше, плагин прекрасно работает с последними версиями Android Build Tools тоже.
ОРИГИНАЛЬНЫЙ ОТВЕТ ОТ ФЕВРАЛЯ 2014
Публикация как AAR
Если вы не возражаете использовать более старую версию com.android.tools.build:gradle
(т.е. 0.5.4), вы можете использовать подход, описанный в этот блогпост. Не то, что в соответствии с обсуждение в списке рассылки adt-dev, это не работает в 0.5.5.
Добавьте следующие строки в build.gradle
:
apply plugin: 'maven-publish'
// load bundleRelease task
// this will not load the task in 0.5.5
android.libraryVariants
publishing {
publications {
maven(MavenPublication) {
artifact bundleRelease
}
}
}
Чтобы опубликовать на своем локальном репозитории maven, вызовите эту команду:
gradle publishToMavenLocal
Публикация как JAR
Если ваша библиотека Android не имеет настраиваемых ресурсов и может быть опубликована как JAR, вы можете использовать следующий build.gradle
, который работает даже с 0.5.5.
// build JAR file
task androidReleaseJar(type: Jar, dependsOn: assembleRelease) {
from "$buildDir/classes/release/"
}
apply plugin: 'maven-publish'
publishing {
publications {
maven(MavenPublication) {
artifact androidReleaseJar
}
}
}
Чтобы опубликовать на своем локальном репозитории maven, вызовите эту команду:
gradle publishToMavenLocal
Ответ 5
Я просто решил проблему, определив архив загрузки, как описано здесь:
Gradle документация 52.6.2. Развертывание в репозиторий Maven
uploadArchives {
repositories {
mavenDeployer {
repository(url: "file://${System.env.HOME}/.m2/repository/")
}
}
}
вызов
gradle uploadArchives
развертывает артефакт в (в моем случае локальном) Maven repo.
Я не нашел простой и более гибкий способ указать локальный репозитивный URL-адрес, например. mavenLocal(), но это соответствует моим потребностям.