android - Gradle 不包括已发布的 pom.xml 中的依赖项

标签 android maven gradle pom.xml

我有一个 Gradle 项目,我正在使用 ma​​ven-publisher 插件将我的 android 库安装到 maven local 和 maven repo。

可以,但是生成的 pom.xml 不包含任何依赖信息。是否有解决方法来包含该信息,或者我是否被迫返回 ma​​ven 插件并执行所有需要的手动配置?


研究我意识到我没有告诉出版物依赖项在哪里,我只是指定输出/Artifact ,所以我需要一种方法来链接这个 MavenPublication到依赖项,但我还没有在文档中找到如何做到这一点。

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

Relevant build.gradle sections

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

生成的 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>

最佳答案

我可以通过让脚本直接使用 pom.withXml 将依赖项添加到 pom 来解决这个问题。

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

这适用于我的项目,它可能会对其他项目产生无法预料的后果。

关于android - Gradle 不包括已发布的 pom.xml 中的依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24743562/

相关文章:

java - 未编译的 Java 程序可以工作,但当 Coldfusion 从 'jar' 文件调用方法时会产生错误?

javascript - 如何在index.html或javascript中获取Gradle构建版本

android - 如何从Gradle中排除内部库

android - 如何在一个布局中制作两个Recyclerview

android - 如何按 Intent 使用内置均衡器

java - Maven 循环依赖

java - Maven不使用本地JRE/JDK

java - 如何使用 gradle、jaxb 和 xjc 从 xsd 生成 jaxb 类,类应该有 XmlRootElement

android - 声明后在onCreate中访问Android服务

android - 带有谷歌 IMA SDK 的 Exoplayer