我正在将我们的一个项目从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)
}
答案 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' )
}
}
}
}
}
}