【问题标题】:Unable to publish to local maven repo when using Gradle and Spring Boot使用 Gradle 和 Spring Boot 时无法发布到本地 maven 存储库
【发布时间】:2014-07-03 04:14:45
【问题描述】:

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

我正在尝试使用 maven 或 maven-publish gradle 插件构建并发布到我的本地 maven 存储库,但出现错误:

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

不明白为什么。 version、group 和 archivesBaseName 都在 build.gradle 中指定。一个不依赖 SpringBoot 的类似项目可以正常工作。

有人可以提出问题可能是什么吗?

谢谢!

--约翰

【问题讨论】:

  • artifactory 插件需要maven 插件,而artifactory-publish 需要maven-publish 插件,从您的问题来看,spring-boot 插件与它们冲突。因此,您可能需要从弄清楚这一点开始。重新表述问题或询问有关将 maven 插件添加到 spring-boot probject 的其他问题可能是一个好主意。

标签: gradle spring-boot


【解决方案1】:

您可能需要确保还指定了父 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}"
          }
        }
    }
}

【讨论】:

  • 我遇到了同样的问题,这解决了它。不过,我不得不对 ${project.bootVersion} 进行硬编码。
  • 我们为什么需要这么奇怪的配置。我尝试将pom.project.parent 设置为我的项目,但失败了。所以我复制了你的解决方案,它成功了。
  • 如果我们使用 maven-publish 插件我们应该改变什么?在这种情况下,上面的代码 sn-p 不起作用。
  • @ernesto.guevara 我使用 maven-publish 插件在这个问题上取得了进展,使用: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',springBootVersion) } from components.java } }
  • 非常感谢这个解决方案,正是我正在寻找的东西。此外,我还使用install.depensOn build 扩展了构建脚本,以使发布的 jar 可以运行。
【解决方案2】:

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

例如...
archivesBaseName = 'xcxcxcxc'
组=“com.blah.xxdddd”
版本 = '#.#.#'
...

【讨论】:

    【解决方案3】:

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

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

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

    【讨论】:

      【解决方案4】:

      我在这里遇到了同样的问题。谢谢@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/"
              }
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-12-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-14
        • 2022-01-28
        • 2020-12-11
        • 2016-03-28
        相关资源
        最近更新 更多