Android maven-publish生成pom文件本地项目依赖信息错误如何解决?
根因说明
出现该问题的核心原因是Gradle处理项目间依赖时,默认使用项目名作为生成pom文件的依赖artifactId,你在MavenPublication中单独配置的自定义artifactId不会被自动同步到依赖声明中。
解决方案
方案一:全局统一定义模块属性(推荐)
从根源对齐所有场景的artifactId配置,一劳永逸解决匹配问题:
- 先在项目根目录
build.gradle的allprojects块中统一配置groupId和版本号,同时解决版本号显示unspecified的问题:
allprojects { group = "org.my.group" version = "${version_major}.${version_minor}." + getPatchVersion() }
- 在每个子模块的
build.gradle中配置archivesBaseName为对应要发布的artifactId:- Lib2模块加:
archivesBaseName = "my-artifact-lib2" - Lib3模块加:
archivesBaseName = "my-artifact-lib3"
- Lib2模块加:
- 简化所有模块的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
相关产品推荐
相关产品推荐

