Gradle maven-publish 不构建独立的 spring-boot 应用程序

Posted

技术标签:

【中文标题】Gradle maven-publish 不构建独立的 spring-boot 应用程序【英文标题】:Gradle maven-publish does not build standalone spring-boot application 【发布时间】:2014-11-30 11:26:57 【问题描述】:

当我使用gradle build 构建一个spring-boot 应用程序(到一个独立的jar)时,会生成正确的工件。生成的 jar 包含所有依赖的 jar,并且是可执行的。

我还配置了maven-publish插件如下:

publishing 
   publications 
      mavenJava(MavenPublication) 
         from components.java
      
   

现在,当我执行gradle publish 时,将构建并发布一个没有依赖关系的小得多的 jar。

在后一种情况下不执行以下步骤。

:myProject:bootRepackage                                                                        
:myProject:assemble

如何确保发布时执行正确的构建步骤?

【问题讨论】:

【参考方案1】:

我有点惊讶从components.java 发布不会触发Java 插件的assemble 任务。 Spring Boot 的 bootRepackage 任务设置为 assemble 任务的依赖项,因此您需要使 publish 运行 assemble。尝试将以下内容添加到您的build.gradle

publish 
    dependsOn assemble
 

【讨论】:

原因是Java插件只是将jar任务的结果添加到组件集合中。 Spring Boot 插件负责将其修改为重新打包的 jar。也就是说,有人可能会争辩说,发布的内容实际上应该只是普通的 jar,而重新打包的 jar 可能应该在一个唯一的分类器下发布。 这是一个很好的建议,谢谢。 Spring Boot 当前并未将重新打包的 jar 视为单独的工件,而是将 jar 任务的输出转换到位。我现在想知道是否也应该更改它,以便可以在 Gradle 构建中引用原始工件和重新打包的工件。我打开了github.com/spring-projects/spring-boot/issues/1666。 在重新打包的 jar 上分配一个分类器是already supported。只需添加 `bootRepackage classifier = 'boot' 。 我指的是使重新打包的工件在构建中可用,例如通过将其包含在 project.configurations.archives.allArtifacts 中

以上是关于Gradle maven-publish 不构建独立的 spring-boot 应用程序的主要内容,如果未能解决你的问题,请参考以下文章

Gradle部署

什么命令将使用maven-publish成功推送到s3存储桶

带有 Gradle 的 POM 中缺少 Android 库依赖项

如何解决 Jitpack “错误:未找到构建工件”?

Gradle:如何发布自定义文件工件?

Gradle初探:发布项目到Nexus资源库