有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

当我使用gradle插件maven pbulish将JAR上载到Maven存储库时,如何排除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


共 (2) 个答案

  1. # 1 楼答案

    使用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()
                        }
                    }
                }
    
  2. # 2 楼答案

    1. dependencyNode.appendNode('scope', 'implementation')。maven没有任何“实现”范围,有效值为-compile、provided、runtime、test

    2. 打印依赖项循环中依赖项的所有名称/类型-排除所有“项目”类型依赖项-如您的if条件