web-dev-qa-db-fra.com

La tâche "installer" du plugin Gradle Maven ne fonctionne pas avec le projet de bibliothèque Android

Je souhaite installer le projet de bibliothèque Android sur le référentiel maven local . Voici 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
    }
}

Quand je cours:

gradle install -i

ça reste coincé ici:

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

La première chose que j'ai remarquée, c’est qu’il essayait pour une raison étrange de le déployer sur un appareil au format APK.

Est-ce que je fais quelque chose de mal ou est-ce simplement le plugin Android-library non compatible avec le plugin maven?

32
Nimrod Dayan

Edit: Veuillez consulter la page github ( https://github.com/dcendents/Android-maven-gradle-plugin ) pour obtenir les dernières instructions et trouver la version correcte à utiliser. Les instructions originales ne conviennent plus avec la dernière version du logiciel.

Message original:

J'ai modifié le plugin maven pour qu'il soit compatible avec les projets de bibliothèque Android. Voir le projet sur github: https://github.com/dcendents/Android-maven-gradle-plugin

Configurez vos projets de bibliothèque Android pour l'utiliser: 

buildscript {
    repositories {
        mavenCentral()
    }

    dependencies {
        classpath 'com.github.dcendents:Android-maven-plugin:1.0'
    }
}

apply plugin: 'Android-library'
apply plugin: 'Android-maven'

Ensuite, vous devriez pouvoir installer aar dans votre référentiel maven local à l’aide de la tâche d’installation.

J'espère que cela vous aidera, si vous rencontrez des problèmes avec le plugin, faites-le-moi savoir sur github et je corrigerai ce problème.

32
dcendents

En développant la réponse de CyclingSir, je propose d’ajouter une tâche distincte "installArchives". Cela devrait également permettre de récupérer vos artefacts personnalisés (par exemple, les sources).

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
    }
  }
}

Notez qu'avec le plug-in Gradle Android v0.5.5, gradle install tente toujours d'installer quelque chose sur un appareil. 

17
viphe

Il existe une solution plus simple si vous ne souhaitez pas utiliser de plug-in personnalisé. Au lieu de cela, recréez simplement la tâche d’installation avec un nom différent. Je l'ai appelé installArchives. Ajoutez le code suivant à votre 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'
    }
}

Vous pouvez maintenant exécuter gradle installArchives pour installer votre aar localement.

11
Greg

MISE À JOUR 2014-11-26

La réponse ci-dessous était logique au moment de la rédaction, lorsque les outils de génération Android étaient à la version 0.5.5. Il est probablement obsolète et ne fonctionne probablement plus.

J'ai personnellement changé mes projets pour utiliser Android-maven-plugin comme décrit dans la réponse ci-dessus, le plugin fonctionne également avec les versions récentes d'Android Build Tools.

LA REPONSE INITIALE DE FEVRIER 2014

Publication en tant que AAR

Si vous utilisez une ancienne version de com.Android.tools.build:gradle (c'est-à-dire 0.5.4), vous pouvez utiliser l'approche décrite dans this blogpost . Pas que selon la discussion dans adt-dev mailing-list , cela ne fonctionne pas dans 0.5.5.

Ajoutez les lignes suivantes à votre 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
        }
    }
}

Pour publier sur votre référentiel Maven local, appelez cette commande:

gradle publishToMavenLocal

Publication en tant que JAR

Si votre bibliothèque Android ne possède pas de ressources personnalisées et peut être publiée en tant que JAR, vous pouvez utiliser le build.gradle suivant qui fonctionne même avec 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
        }
    }
}

Pour publier sur votre référentiel Maven local, appelez cette commande:

gradle publishToMavenLocal
6
Miroslav Bajtoš

Je viens de résoudre le problème en définissant une archive de téléchargement comme décrit ici: Documentation Gradle 52.6.2. Déploiement sur un référentiel Maven

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

appel 

gradle uploadArchives

déploie l'artefact sur le dépôt Maven (dans mon cas, local). Je n’ai pas trouvé de moyen simple et plus flexible de spécifier l’URL du dépôt local avec par exemple. mavenLocal () encore mais ce qui précède convient à mes besoins.

0
CyclingSir