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