Подтвердить что ты не робот

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?

4b9b3361

Ответ 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(), но это соответствует моим потребностям.