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

时间:2015-01-16 01:04:17

标签: maven gradle maven-plugin pom.xml

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不会将构建识别为有效标识符。我只是希望有一个比通过groovy手动编辑xml更优雅的解决方案。我能找到的关于此的唯一文档是Gradle docs Chap 53

2 个答案:

答案 0 :(得分:6)

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

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

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

答案 1 :(得分:0)

这是一个更详细的例子:

.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")