在没有(rootproject)发布工件/ packaging = pom的情况下发布(rootproject)pom

时间:2014-12-15 14:33:54

标签: gradle pom.xml artifactory

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

遗留的(基于maven的)构建环境也要求根项目发布一个pom文件,其“打包”节点等于“pom”(普通的maven行为,所以看起来如此)

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

现在的解决方法是让root项目使用java插件,生成/安装一个空jar并操纵生成的pom以符合maven期望(packaging = pom),但那是一个hack。

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

示例项目:

settings.gradle

rootProject.name = 'MultiProject'
include 'child01', 'child02'
rootProject.children.each { it.name = rootProject.name + "-" + it.name }

的build.gradle

subprojects {
  apply plugin: 'java'
}
allprojects {
  apply plugin: 'maven'
  group = 'my_group'
  version = '0.0.1-SNAPSHOT'
}

EDIT(当前解决方法),build.gradle的补充

// 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)
}

1 个答案:

答案 0 :(得分:1)

我会使用gradle maven-publish插件。使用该插件,您可以定义特定的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' )
                    }
                }
            }
        }
    }
}