Android maven-publish 生成的 pom 文件对本地项目依赖项的依赖信息不正确
Android maven-publish generated pom file has incorrect dependency information for local project dependencies
我有一个库 (Lib1),它依赖于我与 Lib1 一起从源代码构建的其他几个库(Lib2 和 Lib3)。这三个都作为工件发布,工件 ID 分别为 my-artifact-lib1、my-artifact-lib2 和 my-artifact-lib3。当我通过 maven-publish 插件发布工件时,我在 pom 文件中得到了一个 dependencies 元素,如下所示:
<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,而不是它们的模块名称?
我有类似的结构,至少对我来说,以下更改有效:
我已确保子项目名称与所需的最终库名称完全匹配。因此,在您的示例中,我已将项目 Lib1 更改为 my-artifact-lib1。
关于版本和组,解决方案似乎是,在根 build.gradle 中必须包含所有项目的定义,如
allprojects {
group "org.my.group"
version "${version_major}.${version_minor}."+getPatchVersion()
}
至少在我的环境中这是可行的
我有一个库 (Lib1),它依赖于我与 Lib1 一起从源代码构建的其他几个库(Lib2 和 Lib3)。这三个都作为工件发布,工件 ID 分别为 my-artifact-lib1、my-artifact-lib2 和 my-artifact-lib3。当我通过 maven-publish 插件发布工件时,我在 pom 文件中得到了一个 dependencies 元素,如下所示:
<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,而不是它们的模块名称?
我有类似的结构,至少对我来说,以下更改有效:
我已确保子项目名称与所需的最终库名称完全匹配。因此,在您的示例中,我已将项目 Lib1 更改为 my-artifact-lib1。
关于版本和组,解决方案似乎是,在根 build.gradle 中必须包含所有项目的定义,如
allprojects {
group "org.my.group"
version "${version_major}.${version_minor}."+getPatchVersion()
}
至少在我的环境中这是可行的