it-swarm.com.ru

Задача установки плагина Gradle Maven не работает с проектом библиотеки Android

Я хочу установить проект библиотеки 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?

32
Nimrod Dayan

Edit: Пожалуйста, обратитесь к странице 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, и я исправлю это.

32
dcendents

Разрабатывая ответ 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 все еще пытается установить что-то на устройство. 

17
viphe

Есть более простое решение, если вы не хотите использовать пользовательский плагин. Вместо этого просто заново создайте задачу установки с другим именем. Я назвал это 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 для локальной установки вашего aar.

11
Greg

ОБНОВЛЕНИЕ 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
6
Miroslav Bajtoš

Я просто решил проблему, определив архив загрузки, как описано здесь: Документация Gradle 52.6.2. Развертывание в хранилище Maven

uploadArchives {
  repositories {
    mavenDeployer {
      repository(url: "file://${System.env.HOME}/.m2/repository/")
    }
  }
}

призвание 

gradle uploadArchives

развертывает артефакт в (в моем случае локальном) репозитории Maven. Я не нашел простого и более гибкого способа указать URL локального репо, например, mavenLocal () пока что, но вышеперечисленное удовлетворяет моим потребностям.

0
CyclingSir