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

Android maven-publish生成的pom文件包含不正确的本地项目依赖关系信息

司寇研
2023-03-14

我有一个库(Lib1),它依赖于我与Lib1一起从源代码构建的其他几个库(Lib2和Lib3)。所有三个都作为工件发布,工件ID分别为my-artifat-lib1、my-artifat-lib2和my-artifat-lib3。当我通过maven-Publ插件发布工件时,我在pom文件中得到了一个依赖项元素,如下所示:

<dependencies>
  <dependency>
    <groupId>org.my.group</groupId>
    <artifactId>Lib2</artifactId>
    <version>unspecified</version>
    <scope>runtime</scope>
  </dependency>
  <dependency>
    <groupId>org.my.group</groupId>
    <artifactId>Lib3</artifactId>
    <version>unspecified</version>
    <scope>runtime</scope>
  </dependency>
</dependencies>

未指定的版本可以通过在项目级 build.gradle 的 allprojects{} 块中放置一个版本属性来修复,但更大的问题是工件 ID 与发布数据不匹配:

Lib1Publication(MavenPublication) {
  from components.release
  groupId "org.my.group"
  artifactId "my-artifact-lib1"
  version "${version_major}.${version_minor}."+getPatchVersion()
}
Lib2Publication(MavenPublication) {
  from components.release
  groupId "org.my.group"
  artifactId "my-artifact-lib2"
  version "${version_major}.${version_minor}."+getPatchVersion()
}
Lib3Publication(MavenPublication) {
  from components.release
  groupId "org.my.group"
  artifactId "my-artifact-lib3"
  version "${version_major}.${version_minor}."+getPatchVersion()
}

这就产生了一个问题,任何尝试使用 my-artifact-lib1 作为依赖项并要求 my-artifact-lib2 和 my-artifact-lib3 作为传递依赖项的客户端最终都会搜索 artifact id Lib2 和 Lib3,但一无所获。

Lib1的模块级build.gradle与其他两个模块的项目依赖关系如下:

dependencies {
  implementation project(path: ':Lib2')
  implementation project(path: ':Lib3')
}

我如何获得为my-artifact-lib1生成的可传递依赖项,以便为项目依赖项使用正确的工件id,而不是它们的模块名?

共有1个答案

洪高扬
2023-03-14

我有一个类似的结构,至少对我来说,以下变化有效:

我已经确保子项目名称与所需的最终库名称完全匹配。因此,在您的示例中,我将项目Lib1更改为my-artifact-lib1。

关于版本和组,解决方案似乎是,在root build.gradle中,所有项目的定义都必须包括如下

allprojects {
    group "org.my.group"
    version "${version_major}.${version_minor}."+getPatchVersion()
}

至少在我的环境中,这是可行的

 类似资料:
  • 我有一个项目,它有一个(Java)模块,其次是一个(Android库)模块,它依赖于模块。我以前一直在我的文件中使用插件,并且我一直在使用该插件的任务来发布我的两个模块中的工件。这已经工作并产生了pom文件,这些文件反映了我的文件中的依赖项。 我想我会用新的插件替换旧的插件。但是,我看到插件生成的pom文件不包含任何依赖项。这是设计使然,这是插件中的错误还是我错误地使用了插件? 我的模块中的文件如

  • 我有一个Gradle项目,它做了两件正交的事情: 编译并运行一些Java。 生成并发布一个工件。 此工件与Java无关;它是由自定义JavaExec任务生成的。但是,自动生成的POM(来自Maven插件)似乎包含错误的依赖项。问题:如何防止这种情况? 我的build.gradle是这样的: 我这样调用Gradle: AFAICS,< code>foo配置与Java配置无关。所以我希望发布的POM不

  • 我在ubuntu 18.04上运行maven 3.6.0。 我的应用程序的pom.xml包括这个依赖项;关联的“neptus”jar在我的本地. m2/repository中: 我的应用程序实际上引用了“neptus”jar文件中的类,所以我想在我的项目的uberjar中包含这些类。因此,pom.xml也包括这个,改编自http://maven.apache.org/plugins/maven-s

  • 我试图让ESB系统使用ServiceMix和ActiveMQ运行。但甚至在我深入到这一点之前,我就有一个关于POM依赖类型的问题。我得到的maven依赖关系如下: 如能提供任何指导,不胜感激。这个ServiceMix由于缺乏文档而令人沮丧。

  • 我正在使用“maven”插件将Gradle构建创建的工件上传到Maven中央存储库。我正在使用类似于以下任务的任务: 然而,此任务创建的POM文件不能正确报告在我的Gradle构建文件中被排除的依赖项。例如: 如何在生成的POM文件中正确管理排除的依赖项?

  • Debian软件包管理系统会自动管理软件的依赖关系,使我们在安装软件时方便了很多,不用理会复杂的软件依赖关系,这也是Debian发行版的一大特色。但了解软件包的依赖关系对你熟悉Linux和进行系统开发是很有好处的,所以Debian也提供了工具帮我们生成软件包的依赖关系图。操作步骤如下,首先,安装相关的工具: debian:~# apt-get install apt-rdepends sprin