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

如何解决Gradle上传Jar到Nexus Maven仓库时POM无效及依赖排除问题?

问题根源
  • 你调用from components.java后maven-publish插件会自动生成<dependencies>节点,你又手动追加了一个相同节点,导致POM文件结构重复失效
  • 你声明依赖用的是compile配置,但遍历依赖时用了configurations.implementation,低版本Gradle下无法匹配到你声明的项目依赖
  • 你手动配置的依赖scope写了implementation,Maven标准scope没有这个值,会导致依赖无法被正常识别
修改后的pom.withXml配置
pom.withXml {
    // 先删除默认生成的dependencies节点,避免结构重复
    def rootNode = asNode()
    def existingDeps = rootNode.get('dependencies')
    if (existingDeps != null) {
        existingDeps.each { rootNode.remove(it) }
    }
    // 新建唯一的dependencies节点
    def dependenciesNode = rootNode.appendNode('dependencies')
    // 匹配你用的compile配置遍历依赖,高版本Gradle可替换为configurations.implementation
    configurations.compile.allDependencies.each { dep ->
        // 过滤排除指定的两个子项目依赖,同时跳过无效的unspecified依赖
        if (dep.name != null 
            && !"unspecified".equals(dep.name) 
            && !["f_frame", "p_AppComm"].contains(dep.name)) {
            def dependencyNode = dependenciesNode.appendNode('dependency')
            dependencyNode.appendNode('groupId', dep.group)
            dependencyNode.appendNode('artifactId', dep.name)
            dependencyNode.appendNode('version', dep.version)
            // 改用Maven支持的compile scope
            dependencyNode.appendNode('scope', 'compile')
        }
    }
}
补充说明
  • Gradle 6+版本已废弃compile配置,建议将dependencies块中的compile统一替换为implementation,同步将上述代码中的configurations.compile改为configurations.implementation即可符合官方规范
  • 后续需要新增排除依赖时,直接向["f_frame", "p_AppComm"]数组中添加对应artifactId即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 18:15:03