android maven gradle pom.xml

android - Gradle no incluye dependencias en pom.xml publicado



maven (3)

He actualizado la solución C.Ross. Este ejemplo generará pom.xml con las dependencias de la configuración de compilación y también con las dependencias de compilación especiales, por ejemplo, si utiliza dependencias diferentes para la versión de depuración o de depuración (debugCompile y releaseCompile). Y también agrega exlusiones

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 (debugCompile or releaseCompile and compile) def configurationNames = ["${variant.name}Compile", ''compile''] 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) } } } } } } } } } }

Tengo un proyecto de Gradle. Estoy usando el complemento maven-publisher para instalar mi biblioteca de Android en maven local y en un maven repo.

Eso funciona, pero el pom.xml generado no incluye ninguna información de dependencia. ¿Hay alguna solución para incluir esa información, o me veo obligado a volver al plugin maven y hacer toda la configuración manual que lo requiera?

Investigando me di cuenta de que no le estoy diciendo a la publicación dónde están las dependencias, solo estoy especificando la salida / artefacto, así que necesito una forma de vincular esta MavenPublication a las dependencias, pero todavía no he encontrado cómo hacerlo en la documentación.

------------------------------------------------------------ Gradle 1.10 ------------------------------------------------------------ Build time: 2013-12-17 09:28:15 UTC Build number: none Revision: 36ced393628875ff15575fa03d16c1349ffe8bb6 Groovy: 1.8.6 Ant: Apache Ant(TM) version 1.9.2 compiled on July 8 2013 Ivy: 2.2.0 JVM: 1.7.0_60 (Oracle Corporation 24.60-b09) OS: Mac OS X 10.9.2 x86_64

Secciones relevantes de build.gradle

//... apply plugin: ''android-library'' apply plugin: ''robolectric'' 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 } } } }

Generado pom.xml:

<?xml version="1.0" encoding="UTF-8"?> <project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <modelVersion>4.0.0</modelVersion> <groupId>org.example.android</groupId> <artifactId>my-android-sdk</artifactId> <version>gradle-SNAPSHOT</version> <packaging>aar</packaging> </project>


Pude pom.withXml esto haciendo que el script agregue las dependencias al pom directamente usando 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 compile dependencies (we don''t want the test ones), adding a <dependency> node for each configurations.compile.allDependencies.each { def dependencyNode = dependenciesNode.appendNode(''dependency'') dependencyNode.appendNode(''groupId'', it.group) dependencyNode.appendNode(''artifactId'', it.name) dependencyNode.appendNode(''version'', it.version) } }

Esto funciona para mi proyecto, puede tener consecuencias imprevistas en otros.


Supongo que tiene algo que ver con la directiva de from components.java , como se ve en la guide . Tenía una configuración similar e hizo la diferencia al agregar la línea en el bloque de publicación:

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