【问题标题】:Android maven-publish generated pom file has incorrect dependency information for local project dependenciesAndroid maven-publish 生成的 pom 文件对本地项目依赖的依赖信息不正确
【发布时间】:2021-10-17 05:43:45
【问题描述】:

我有一个库 (Lib1),它依赖于我从源代码和 Lib1 一起构建的其他几个库(Lib2 和 Lib3)。这三个都作为工件发布,工件 ID 分别为 my-artifact-lib1、my-artifact-lib2 和 my-artifact-lib3。当我通过 maven-publish 插件发布工件时,我会在 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 作为传递依赖项的客户端最终会搜索工件 id Lib2 和 Lib3 而一无所获.

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

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

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

【问题讨论】:

    标签: android maven gradle maven-publish


    【解决方案1】:

    我有类似的结构,至少对我来说,以下更改有效:

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

    关于版本和组的解决方案似乎是,在根 build.gradle 中定义 allprojects 必须像

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

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

    【讨论】:

    • 是的,这就是我一直默认的。在这种情况下,一种独立于模块名称来指定工件 id 的方法会很好,但实际上并不是必需的。
    猜你喜欢
    • 2016-06-20
    • 1970-01-01
    • 2015-05-03
    • 1970-01-01
    • 2022-12-06
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-12
    相关资源
    最近更新 更多