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