如何解决gradle上传jar到nexus的maven仓库时POM文件无效的问题?

How to solve the problem of invalid POM file when gradle uploads jar to maven repository of nexus?

使用gradle插件maven pbulish上传jar到Maven仓库时,如何排除gradle项目中的一些依赖? 我的gradle。构建文件如下:

dependencies {
    compile project(":frame:f_frame");
    compile project(":p_AppComm");
    compile project(":p_Systemaudit");
}

publishing {
    repositories {
        maven {
            url = 'http://XXX/repository/infra_test_snapshot/'

            credentials {
                username = 'admin'
                password = 'admin'
            }
        }
    }

    publications {
        maven(MavenPublication) {
            groupId "AAAAA"
            artifactId "BBBBB"
            version "CCCCC"
            from components.java

            pom.withXml {
                def dependenciesNode = asNode().appendNode('dependencies')
                configurations.implementation.allDependencies.each {
                    if (it.name != null && !"unspecified".equals(it.name) && !"f_frame".equals(it.name) && !"p_AppComm".equals(it.name)) {
                        println it.toString()
                        def dependencyNode = dependenciesNode.appendNode('dependency')
                        dependencyNode.appendNode('groupId', it.group)
                        dependencyNode.appendNode('artifactId', it.name)
                        dependencyNode.appendNode('version', it.version)
                        dependencyNode.appendNode('scope', 'implementation')
                    }
                }
            }

            artifact sourceJar {
                classifier "sources"
            }
        }
    }
}

如何修改pom.withxml函数的内容,去掉Maven仓库POM文件依赖中的f_framep_Appcomm

  1. dependencyNode.appendNode('scope', 'implementation')。 maven 没有任何 'implementation' 作用域,有效值为 - compile、provided、runtime、test

  2. 打印依赖循环中依赖的所有名称/类型 - 排除所有 'project' 类型依赖 - 就像你的 if 条件

使用maven-publish插件发布jar包时,已根据dependencies{}在自动生成的POM文件中添加依赖。我不应该再次添加相同的依赖项。正确的方法是循环 asNode() 并删除我不需要的部分。

修改后的代码如下:

pom.withXml {
                Node pom = asNode()
                NodeList pomNodes = pom.value()
                Node dependencies = pomNodes.get(4)
                NodeList pomDependencies = dependencies.value()

                Iterator iterator = pomDependencies.iterator();
                while (iterator.hasNext()) {
                    Node dependeny = iterator.next()
                    NodeList str = dependeny.get("artifactId")
                    String dependName = str.get(0).value().get(0)
                    if ("f_frame".equals(dependName) || "p_AppComm".equals(dependName)) {
                        iterator.remove()
                    }
                }
            }