Gradle 发布(rootproject)pom而不发布(rootproject)工件/打包=pom

Gradle 发布(rootproject)pom而不发布(rootproject)工件/打包=pom,gradle,pom.xml,artifactory,Gradle,Pom.xml,Artifactory,我正在将我们的一个项目从maven迁移到gradle:这是一个gradle多项目&所有子项目都将工件发布到artifactory。到目前为止还不错 然而,遗留的(基于maven的)构建环境也期望根项目发布一个pom文件,其“打包”节点等于“pom”(看起来是常见的maven行为) 所以现在,我试图让Gradle生成这个,但只找到为每个工件定制自动生成pom的方法,我找不到一种不发布实际工件就生成/上传pom的方法 目前的解决方法是让根项目使用java插件,生成/安装一个空jar,并操纵生成的po

我正在将我们的一个项目从maven迁移到gradle:这是一个gradle多项目&所有子项目都将工件发布到artifactory。到目前为止还不错

然而,遗留的(基于maven的)构建环境也期望根项目发布一个pom文件,其“打包”节点等于“pom”(看起来是常见的maven行为)

所以现在,我试图让Gradle生成这个,但只找到为每个工件定制自动生成pom的方法,我找不到一种不发布实际工件就生成/上传pom的方法

目前的解决方法是让根项目使用java插件,生成/安装一个空jar,并操纵生成的pom以符合maven的期望(packaging=pom),但这是一种攻击

有没有办法用gradle生成这个根pom文件

示例项目:

设置。渐变

rootProject.name = 'MultiProject'
include 'child01', 'child02'
rootProject.children.each { it.name = rootProject.name + "-" + it.name }
subprojects {
  apply plugin: 'java'
}
allprojects {
  apply plugin: 'maven'
  group = 'my_group'
  version = '0.0.1-SNAPSHOT'
}
// workaround to generate pom
apply plugin: 'java'

configurations {
    pomCreation
}

task createPom {
    ext.newPomFile = "${buildDir}/blabla.pom"
    doLast {
        pom {
            project {
                packaging 'pom'
            }
        }.writeTo(newPomFile)
    }
}
install.dependsOn(createPom)

artifacts {
    pomCreation file(createPom.newPomFile)
}
build.gradle

rootProject.name = 'MultiProject'
include 'child01', 'child02'
rootProject.children.each { it.name = rootProject.name + "-" + it.name }
subprojects {
  apply plugin: 'java'
}
allprojects {
  apply plugin: 'maven'
  group = 'my_group'
  version = '0.0.1-SNAPSHOT'
}
// workaround to generate pom
apply plugin: 'java'

configurations {
    pomCreation
}

task createPom {
    ext.newPomFile = "${buildDir}/blabla.pom"
    doLast {
        pom {
            project {
                packaging 'pom'
            }
        }.writeTo(newPomFile)
    }
}
install.dependsOn(createPom)

artifacts {
    pomCreation file(createPom.newPomFile)
}
编辑(当前解决方案),添加到build.gradle

rootProject.name = 'MultiProject'
include 'child01', 'child02'
rootProject.children.each { it.name = rootProject.name + "-" + it.name }
subprojects {
  apply plugin: 'java'
}
allprojects {
  apply plugin: 'maven'
  group = 'my_group'
  version = '0.0.1-SNAPSHOT'
}
// workaround to generate pom
apply plugin: 'java'

configurations {
    pomCreation
}

task createPom {
    ext.newPomFile = "${buildDir}/blabla.pom"
    doLast {
        pom {
            project {
                packaging 'pom'
            }
        }.writeTo(newPomFile)
    }
}
install.dependsOn(createPom)

artifacts {
    pomCreation file(createPom.newPomFile)
}

我会使用GradleMaven发布插件来实现这一点。使用该插件,您可以定义特定的pom,而不必上传其他工件。这里有一个例子:

publishing {
    publications {
    maven(MavenPublication) {
        pom.withXml{
            def xml = asNode()
            xml.children().last() + {               
                delegate.dependencies {
                    delegate.dependency {
                        delegate.groupId 'org.springframework'
                        delegate.artifactId 'spring-context'
                        delegate.version( '3.2.8.RELEASE' )
                    }
                }
            }
        }
    }
}

@蓝狗,你是第一个把maven/pom和性感联系起来的人,我想:)我想我和你有同样的问题,你能把你的完整pom包括进去吗?您是如何进行实际部署的?@SimonAndréForsberg,我们目前的工作如下:(1)我们确保将java插件应用于所有项目(包括根项目)(2)我们能够避免父pom包含“packaging'pom'”子句的需要。(3) 我们在jenkins作业“Artifactory Configuration”部分的“Exclude Patterns”中添加了“*.jar”(以避免无理由发布空jar)。。我知道,这是一个解决办法:(