Gradle n’incluant pas les dépendances dans pom.xml publié

J’ai un projet Gradle J’utilise le plugin maven-publisher pour installer ma librairie Android pour convertir un repo local et un maven.

Cela fonctionne, mais le fichier pom.xml généré n’inclut aucune information de dépendance. Existe-t-il une solution pour inclure ces informations ou suis-je obligé de retourner au plug-in maven et de faire toute la configuration manuelle requirejse?


En faisant des recherches, je me suis rendu compte que je ne disais pas à la publication où se trouvent les dépendances, je spécifie seulement le résultat / artefact, donc j’ai besoin d’un moyen de lier cette MavenPublication aux dépendances, mais je n’ai pas encore trouvé comment La documentation.

 -------------------------------------------------- ----------
 Gradle 1.10
 -------------------------------------------------- ----------

 Temps de construction: 2013-12-17 09:28:15 UTC
 Numéro de build: aucun
 Révision: 36ced393628875ff15575fa03d16c1349ffe8bb6

 Groovy: 1.8.6
 Ant: Apache Ant (TM) version 1.9.2 compilé le 8 juillet 2013
 Lierre: 2.2.0
 JVM: 1.7.0_60 (Oracle Corporation 24.60-b09)
 OS: Mac OS X 10.9.2 x86_64

Sections build.gradle pertinentes

 //... apply plugin: 'android-library' apply plugin: 'robolecsortingc' apply plugin: 'maven-publish' //... repositories { mavenLocal() maven { name "myNexus" url myNexusUrl } mavenCentral() } //... android.libraryVariants publishing { publications { sdk(MavenPublication) { artifactId 'my-android-sdk' artifact "${project.buildDir}/outputs/aar/${project.name}-${project.version}.aar" } } repositories { maven { name "myNexus" url myNexusUrl credentials { username myNexusUsername password myNexusPassword } } } } 

Généré pom.xml:

   4.0.0 org.example.android my-android-sdk gradle-SNAPSHOT aar  

J’ai pu contourner ce pom.withXml en faisant en sorte que le script ajoute les dépendances au pom directement en utilisant pom.withXml .

 //The publication doesn't know about our dependencies, so we have to manually add them to the pom pom.withXml { def dependenciesNode = asNode().appendNode('dependencies') //Iterate over the comstack dependencies (we don't want the test ones), adding a  node for each configurations.comstack.allDependencies.each { def dependencyNode = dependenciesNode.appendNode('dependency') dependencyNode.appendNode('groupId', it.group) dependencyNode.appendNode('artifactId', it.name) dependencyNode.appendNode('version', it.version) } } 

Cela fonctionne pour mon projet, il peut avoir des conséquences imprévues dans d’autres.

Je suis mis à niveau avec la solution C.Ross. Cet exemple génère pom.xml avec des dépendances à partir de la configuration de compilation et également avec des dépendances de type de construction spéciales, par exemple si vous utilisez des dépendances différentes pour la version release ou debug (debugComstack et releaseComstack). Et aussi il ajoute des exlusions

 publishing { publications { // Create different publications for every build types (debug and release) android.buildTypes.all { variant -> // Dynamically creating publications name "${variant.name}Aar"(MavenPublication) { def manifest = new XmlSlurper().parse(project.android.sourceSets.main.manifest.srcFile); def libVersion = manifest['@android:versionName'].text() def artifactName = project.getName() // Artifact properties groupId GROUP_ID version = libVersion artifactId variant.name == 'debug' ? artifactName + '-dev' : artifactName // Tell maven to prepare the generated "*.aar" file for publishing artifact("$buildDir/outputs/aar/${project.getName()}-${variant.name}.aar") pom.withXml { //Creating additional node for dependencies def dependenciesNode = asNode().appendNode('dependencies') //Defining configuration names from which dependencies will be taken (debugComstack or releaseComstack and comstack) def configurationNames = ["${variant.name}Comstack", 'comstack'] configurationNames.each { configurationName -> configurations[configurationName].allDependencies.each { if (it.group != null && it.name != null) { def dependencyNode = dependenciesNode.appendNode('dependency') dependencyNode.appendNode('groupId', it.group) dependencyNode.appendNode('artifactId', it.name) dependencyNode.appendNode('version', it.version) //If there are any exclusions in dependency if (it.excludeRules.size() > 0) { def exclusionsNode = dependencyNode.appendNode('exclusions') it.excludeRules.each { rule -> def exclusionNode = exclusionsNode.appendNode('exclusion') exclusionNode.appendNode('groupId', rule.group) exclusionNode.appendNode('artifactId', rule.module) } } } } } } } } } } 

Je suppose que cela a quelque chose à voir avec la directive from components.java , comme on le voit dans le guide . J’avais une configuration similaire et cela faisait la différence d’append la ligne dans le bloc de publication:

 publications { mavenJar(MavenPublication) { artifactId 'rest-security' artifact jar from components.java } }