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

多模块Gradle项目作为类库引入外部项目时找不到子模块依赖如何解决

问题原因

你现在遇到的报错本质是:你用maven-publish插件的from components.java生成发布用的pom文件时,Gradle会自动把父模块dependencies里声明的所有implementation依赖(包括子模块依赖)都写入pom的依赖列表。其他项目引入你的父类库时,会按照pom配置尝试拉取所有依赖,而你没有发布子模块到仓库,所以才会报找不到子模块jar的错误。
你已经在jar配置中把所有子模块的编译类都打包进了父模块jar,所以只需要把pom里的子模块依赖移除即可,不需要发布子模块。

解决方案

修改父模块build.gradle中的publishing配置,增加pom过滤逻辑,移除所有子模块的依赖声明即可,修改后的publishing块如下:

publishing {
    publications {
        mavenJava(MavenPublication) {
            from components.java
            artifactId = 'parent'
            // 新增以下pom修改逻辑
            pom.withXml {
                def rootNode = asNode()
                // 找到pom中的dependencies节点
                def dependenciesNode = rootNode.dependencies?.getAt(0)
                if (dependenciesNode) {
                    // 遍历所有依赖,移除子模块相关依赖
                    dependenciesNode.dependency.each { depNode ->
                        String groupId = depNode.groupId.text()
                        String artifactId = depNode.artifactId.text()
                        // 匹配你自己的子模块坐标规则,可根据实际情况调整
                        if (groupId == 'de.example' && ['child1', 'child2', 'child3'].contains(artifactId)) {
                            depNode.replaceNode {}
                        }
                    }
                }
            }
        }
    }
}
验证方式

修改完成后可以先执行publishToMavenLocal命令把类库发布到本地Maven仓库,打开本地仓库对应路径下的parent-1.0.0.pom文件,确认<dependencies>节点下已经没有child1、child2、child3相关的依赖声明后,再在其他本地项目依赖de.example:parent:1.0.0测试即可正常使用。

注意:这个配置只会移除子模块的依赖声明,子模块中引入的第三方依赖会正常保留在pom中,不会影响传递依赖的使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 00:36:02