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?
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.
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.
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.
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
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.