当前位置: 首页 > 知识库问答 >
问题:

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

胡意致
2023-03-14

我有一个Gradle项目,我正在使用maven-publisher插件将我的android库安装到maven本地和maven Repo。

这是有效的,但是生成的pom.xml不包括任何依赖项信息。是否存在包含这些信息的变通方法,或者我被迫返回到maven插件并执行所有需要的手动配置?

通过研究,我意识到我没有告诉发布依赖项在哪里,我只是指定了输出/工件,所以我需要一种方法将这个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

相关建筑。级配区段

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

共有1个答案

陈晟睿
2023-03-14

我可以通过让脚本直接使用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)
    }
}

这适用于我的项目,它可能会在其他项目中产生不可预见的后果。

 类似资料:
  • 我有一个使用Spring的项目。它使用的是3.1.1版本,但是,由于某些原因,我真的不知道,有些spring工件与两个不同的版本是重复的。我在项目中的所有pom.xml文件中查找这些依赖项。我还使用dependecy插件来找出那些依赖项包含在哪里。 这里有输出的提取 据我所知,这意味着包含在中。 更新:似乎当我评论下一段代码时,罐子不包括在战争中。

  • 我在Scala项目中使用了官方的Gatling Gradle插件,我发现了一个问题,其中包含了依赖项,如 不包括可传递依赖项。也就是说,我有一个Gatling模拟类,它扩展了中的一个类,而依赖于这个类。但是,当我尝试运行模拟时,会出现如下错误 当我查看Gradle依赖时,我将视为的依赖项。我的IDE(IntelliJ)在点击代码时也能识别它。 我试着在一页文档中搜索这个插件,但是我没有看到任何有用

  • 内置。gradle我们将依赖项指定为 运行gradle cleanEclipse设置项目(将jar添加到类路径) 然而,对于某些API,只有maven依赖项可用(我试图从中运行jersey 2.x示例包)https://jersey.java.net/download.html它只提供pom。(xml) 编辑:我知道我可以指定编译组:'groupId',名称:'artifactId',版本:'ve

  • 我有一个jar,build-plugins.jar和一个gradle插件,它是用build.gradle中的这个插件构建的: 这将构建build-plugins.jar。并且使用插件的项目按文件引用插件jar 问题是当我运行第二个项目的任何任务时,我得到的是“class proxy created for class XYZ”,根本原因是四个依赖项(joda-time、commons-io、str

  • 我有一个Android项目,它依赖于纯Java项目。它们都依赖于另一个Java库,也在我在Android Studio中的多项目gradle集中。我有两个版本的库,希望Android和Java项目在调试模式下依赖其中一个,在发布模式下依赖另一个。 Android项目有可能吗?纯Java项目?怎样

  • 我有一个分层的2.4项目,如下所示: 对于每个子项目,我想发布一个.jar文件和一个.pom文件,并将它们存储在maven存储库中。所有常规命令都正确导出到 *.pom 文件中。 假设 中有一个 依赖项。此依赖项将不包含在生成的 *.pom 文件中。 我的gradle发布结构如下所示: ...我做错什么了吗?为什么我的依赖项不会被导出到*. pom文件中?有什么解决方法吗?为了澄清,我期望上面示例