从 gradle 导出 Maven pom.xml 文件时无法注入构建块

Trouble injecting the build block while exporting a Maven pom.xml file from gradle

task writeNewPom {
    pom {
        project {
            /*
            build {
                plugins {
                    plugin {
                        groupId 'GROUP_ID'
                        artifactId 'maven-ipcentral-plugin'
                        version '4.7'
                        executions {}
                        configuration {
                            url "http://CENTRAL_REPORTING_SERVER"
                            logfileprefix "test"
                            ipcProject = true
                            businessUnit "FOUR_DIGIT_CODE"
                            componentEditorsGrouper "ccp-dev"
                            assetEditorsGrouper "ccp-dev"
                            username "USERNAME"
                        }
                    }
                }
            }
            */
            pluginRepositories {
                pluginRepository {
                    id 'ipcentral-snapshots'
                    name 'IPCentral Snapshot Repository'
                    url 'http://PLUGIN_SOURCE/'
                    snapshots {
                        enabled = false
                    }
                    releases {
                        enabled = true
                    }
                }
            }

            profiles {
                profile {
                    id 'inject-cec-credentials'
                    activation {
                        activeByDefault = true
                    }
                    properties {
                        username = "USERNAME"
                    }
                }
            }
        }
    }.writeTo("ipcentral/pom.xml")
}

我正在尝试使用 gradle maven 插件创建一个 pom.xml 文件。它必须引用专为集中依赖报告设计的 Maven 插件。现在它成功地创建了包含所有依赖项、插件存储库信息和配置文件信息的 pom.xml 文件。但是,如果构建部分未被注释,我会收到如下错误:

> No such property: _SCRIPT_CLASS_NAME_ for class: org.apache.maven.model.

如果我尝试像

这样简单的事情
task writeNewPom {
    pom {
        project {
            build {
            }
        }
    }
}

然后我得到同样的错误。 gradle 似乎无法将 build 识别为有效标识符。我只是希望有一个比通过 groovy 手动编辑 xml 更优雅的解决方案。我能找到的唯一文档是 Gradle docs Chap 53

这是因为 project {...} 闭包委托给 ModelBuilder 的一个实例,它扩展了 Groovy 的 FactoryBuilderSupport class已经定义了一个名为 build 的方法。因此,不是配置 Maven Model 对象的 build 属性,而是调用预先存在的 build 方法。

为了解决这个问题,我会使用 withXml {...} 配置 pom 的那部分。

pom {
    project {
        // other non-<build> configuration
    }
}.withXml {
    asNode().appendNode('build').appendNode('plugins').appendNode('plugin').with {
        appendNode('groupId', 'GROUP_ID')
    }
}.writeTo('pom.xml')

这里有一个更详细的例子:

.withXml
{
    asNode().appendNode('build').appendNode('plugins').with
                                                       {

                                                           with
                                                           {


                                                                appendNode('plugin')
                                                                .with
                                                                {

                                                                appendNode('groupId', 'groupId1')

                                                                appendNode('artifactId', 'artifactId1')

                                                                appendNode('version', 'version1')
                                                                }


                                                           }
                                                       with
                                                           {
                                                                appendNode('plugin')
                                                                .with{
                                                                appendNode('groupId', 'groupId2')

                                                                appendNode('artifactId', 'artifactId2')

                                                                appendNode('version', 'version2')
                                                                }

                                                           }
                                                       }
}
.writeTo("pom.xml")