Comme je ne peux pas utiliser un maven privé pour partager ma bibliothèque, je pensais à partager l'aar et à l'importer dans un autre projet. Le problème survient lorsque les fichiers aar et jar ne contiennent aucune dépendance. Donc, une fois que j'ai importé manuellement le fichier aar dans Android studio (en utilisant le package Import .JAR/.AA), il n'y a plus de dépendance, et je dois ajouter manuellement toutes les dépendances. J'ai déjà généré un fichier pom à travers une tâche gradle, bien que je ne trouve aucun moyen de l'importer manuellement sur le projet.
Sur le fichier build.gradle généré automatiquement par le "Importer le package .JAR/.AA" se trouve:
configurations.maybeCreate("default")
artifacts.add("default", file('TestSample_1.0.0.aar'))
Existe-t-il un moyen d'ajouter également le fichier pom/iml? quelque chose comme:
artifacts.add("default", file('pomDependencies.xml'))
Dans votre projet aar, ajoutez maven-publish
plugin et ajouter la configuration de plugin nécessaire.
apply plugin: 'com.Android.library'
apply plugin: 'maven-publish'
...
dependencies {
testCompile 'junit:junit:4.12'
compile 'com.Android.support:appcompat-v7:23.1.1'
compile 'com.novoda:bintray-release:0.2.7'
}
...
publishing {
publications {
maven(MavenPublication) {
groupId 'com.example' //You can either define these here or get them from project conf elsewhere
artifactId 'example'
version '0.0.1-SNAPSHOT'
artifact "$buildDir/outputs/aar/app-release.aar" //aar artifact you want to publish
//generate pom nodes for dependencies
pom.withXml {
def dependenciesNode = asNode().appendNode('dependencies')
configurations.compile.allDependencies.each { dependency ->
def dependencyNode = dependenciesNode.appendNode('dependency')
dependencyNode.appendNode('groupId', dependency.group)
dependencyNode.appendNode('artifactId', dependency.name)
dependencyNode.appendNode('version', dependency.version)
}
}
}
}
//publish to filesystem repo
repositories{
maven {
url "$buildDir/repo"
}
}
}
Peu de choses à noter:
Nous utilisons une publication maven personnalisée, vous devez donc définir ce qui est publié avec la clause artifact
Nous devons générer le pom nous-mêmes, dans le code ci-dessus j'utilise toutes les dépendances de compilation, vous voudrez peut-être vous assurer que toutes les configurations qui vous intéressent sont couvertes.
Fonctionnement gradle publish
sera publié dans une structure de référentiel maven dans le dossier repo
, que vous pourrez ensuite utiliser à partir d'un autre projet.
Dans un autre projet Android, pour utiliser l'aar publié dans # 1: dans le build.gradle de niveau supérieur:
allprojects {
repositories {
jcenter()
maven {
url "D:/full/path/to/repo"
}
}
}
ajoutez le chemin d'accès au référentiel antérieur en tant que référentiel maven. Notez que vous devrez peut-être utiliser le chemin d'accès complet, car $buildDir
a une valeur différente pour ce projet. Dans votre application build.gradle:
dependencies {
...
other dependencies
...
compile ('com.example:example:0.0.1-SNAPSHOT@aar'){transitive=true}
}
transitive=true
est requis pour récupérer les dépendances transitives du fichier pom.
Les choses ont un peu changé, voici comment procéder avec les dernières versions de gradle
Créer le paquet localement (aar et pom)
Modifiez votre fichier de bibliothèque build.gradle
Pour l'inclure
apply plugin: 'maven-publish'
Android {
...
...
}
dependencies {
...
...
}
publishing {
publications {
maven(MavenPublication) {
groupId 'com.domain' //You can either define these here or get them from project conf elsewhere
artifactId 'name'
version '1.0.0'
artifact "$buildDir/outputs/aar/sdk-release.aar" //aar artifact you want to publish
//generate pom nodes for dependencies
pom.withXml {
def dependenciesNode = asNode().appendNode('dependencies')
configurations.implementation.allDependencies.each { dependency ->
if (dependency.name != 'unspecified') {
def dependencyNode = dependenciesNode.appendNode('dependency')
dependencyNode.appendNode('groupId', dependency.group)
dependencyNode.appendNode('artifactId', dependency.name)
dependencyNode.appendNode('version', dependency.version)
}
}
}
}
//publish to filesystem repo
repositories{
maven {
url "$buildDir/repo"
}
}
}
Exécuter à partir du terminal
./gradlew clean
./gradlew build
./gradlew --console=verbose publishToMavenLocal
Les fichiers aar
et pom
ont été créés dans $HOME/.m2/repository/
Comment charger la bibliothèque d'un autre projet
Modifiez le build.gradle
Des projets de la manière suivante:
allprojects {
repositories {
maven {
url "/Users/username/.m2/repository/"
}
google()
jcenter()
}
Vous pouvez utiliser $rootDir
Et définir un chemin relatif.
Ajoutez la bibliothèque en tant que dépendance dans votre module d'application build.gradle
implementation 'com.domain:name:1.0.0'