使用Gradle和Spring Boot时无法发布到本地maven存储库

时间:2014-05-14 22:05:42

标签: gradle spring-boot

我有一个非常简单的spring-boot(1.0.2)示例(基于http://spring.io/guides/gs/rest-service/),使用Gradle(1.12)创建一个jar文件。

我正在尝试使用maven或maven-publish gradle插件构建并发布到我的本地maven repo但是我收到了错误:

  

无法初始化POM pom-default.xml:无法验证项目ngdc.sample的POM:hello-springboot atUsers/jcc/Documents/stash/hello-springboot/build/poms/pom-default.xml < / p>

并且不明白为什么。版本,组和archivesBaseName都在build.gradle中指定。一个不依赖于SpringBoot的类似项目可以正常工作。

有人可以提出问题所在吗?

谢谢!

- 约翰

4 个答案:

答案 0 :(得分:11)

您可能需要确保也指定了父pom或依赖项管理(取决于您的配置,但如果您使用的是Spring Boot Gradle插件,则可能需要它)。示例:https://github.com/spring-projects/spring-boot/blob/master/spring-boot-integration-tests/spring-boot-gradle-tests/src/test/resources/installer.gradle

install {
    repositories.mavenInstaller {
        pom.project {
          parent { 
            groupId 'org.springframework.boot'
            artifactId 'spring-boot-starter-parent'
            version "${project.bootVersion}"
          }
        }
    }
}

答案 1 :(得分:1)

dependency{...}部分中没有依赖版本的Spring Boot Gradle插件时,生成的pom没有Spring Boot等版本。

所以目前需要为所有maven实现的任务自己创建与父pom的关系 parent { groupId 'org.springframework.boot' artifactId 'spring-boot-starter-parent' version "${project.bootVersion}" }

请参阅https://github.com/spring-projects/spring-boot/issues/1716

答案 2 :(得分:1)

我在这里遇到同样的问题。谢谢@cjstehno,我将在此汇总我的构建文件。

1)如果您使用的是maven插件,可以使用官方指南。

http://docs.spring.io/spring-boot/docs/current/reference/html/build-tool-plugins-gradle-plugin.html#build-tool-plugins-gradle-publishing-artifacts-to-a-maven-repository

2)如果您使用的是maven-publish插件,则可以按照以下脚本进行操作。

另外,因为spring boot在发布之前需要自己的包过程(比如bootRepackage和assemble),所以我发布依赖于构建任务。

buildscript {
    dependencies {
        classpath 'org.springframework.boot:spring-boot-gradle-plugin:1.1.9.RELEASE'
    }
}

apply plugin: 'spring-boot'
apply plugin: 'maven-publish'

group = '<some group id>'
version = '<some version with -SNAPSHOT>'

jar {
    baseName = '<jar base name>'
}

publish.dependsOn build

publishing {
    publications { 
        mavenJar(MavenPublication){ 
            pom.withXml { 
                def parentNode = asNode().appendNode('parent') 
                parentNode.appendNode('groupId','org.springframework.boot') 
                parentNode.appendNode('artifactId','spring-boot-starter-parent') 
                parentNode.appendNode('version','1.1.9.RELEASE') 
            } 
            from components.java 
        } 
    }
}

publishing {
    repositories {
        maven {
            credentials {
                username 'admin'
                password 'admin123'
            }
            url "http://<nexus server>:8081/nexus/content/repositories/snapshots/"
        }
    }
}

答案 3 :(得分:0)

这告诉我你正在创建你的工件(jar或war),但是伴随pom的验证失败了。对于有效的maven工件,您需要groupdIdartifactIdversion ....
哪个转换为gradle grouparchivesBaseNameversion。 确保你在工件上设置或配置了这三个属性,你可能会得到一些运气:-)

... e.g
archivesBaseName =&#39; xcxcxcxc&#39;
group =&#34; com.blah.xxdddd&#34;
version =&#39;#。#。#&#39;
...