You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android maven-publish生成pom文件本地项目依赖信息错误如何解决?

根因说明

出现该问题的核心原因是Gradle处理项目间依赖时,默认使用项目名作为生成pom文件的依赖artifactId,你在MavenPublication中单独配置的自定义artifactId不会被自动同步到依赖声明中。

解决方案

方案一:全局统一定义模块属性(推荐)

从根源对齐所有场景的artifactId配置,一劳永逸解决匹配问题:

  1. 先在项目根目录build.gradle的allprojects块中统一配置groupId和版本号,同时解决版本号显示unspecified的问题:
allprojects {
    group = "org.my.group"
    version = "${version_major}.${version_minor}." + getPatchVersion()
}
  1. 在每个子模块的build.gradle中配置archivesBaseName为对应要发布的artifactId:
    • Lib2模块加:archivesBaseName = "my-artifact-lib2"
    • Lib3模块加:archivesBaseName = "my-artifact-lib3"
  2. 简化所有模块的Publication配置,不需要重复写groupId、artifactId、version,自动读取全局配置的属性即可:
// Lib1的发布配置示例,Lib2、Lib3同理
Lib1Publication(MavenPublication) {
  from components.release
}

配置完成后重新发布,生成的pom文件会自动使用正确的artifactId和版本号作为传递依赖。

方案二:手动修改Pom节点

如果不想调整现有全局配置,可直接在Lib1的发布配置中新增pom修改逻辑,手动替换依赖的artifactId和版本号:

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

  // 新增pom内容修改逻辑
  pom.withXml {
    def dependenciesNode = asNode().dependencies[0]
    // 遍历所有依赖节点做替换
    dependenciesNode.dependency.each { depNode ->
      def originArtifactId = depNode.artifactId[0].text()
      if(originArtifactId == "Lib2") {
        depNode.artifactId[0].setValue("my-artifact-lib2")
      } else if(originArtifactId == "Lib3") {
        depNode.artifactId[0].setValue("my-artifact-lib3")
      }
      // 替换版本号,解决unspecified问题
      depNode.version[0].setValue(version)
    }
  }
}

内容的提问来源于stack exchange,提问作者CCJ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 20:21:02