2014-10-06 48 views
8

当我使用gradle build构建弹簧引导应用程序(对独立jar)时,会生成适当的工件。生成的jar包含所有相关的jar,并且是可执行的。Gradle maven-publish不会构建独立的弹簧引导应用程序

我还配置了Maven的发布插件如下:

publishing { 
    publications { 
     mavenJava(MavenPublication) { 
     from components.java 
     } 
    } 
} 

现在,当我执行gradle publish,无依赖性更小罐子得到建立和公布。

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

:myProject:bootRepackage                   
:myProject:assemble 

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

回答

17

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

publish { 
    dependsOn assemble 
} 
+0

原因是Java插件只是将'jar'任务的结果添加到组件集合中。这将是Spring Boot插件的职责,将其修改为重新打包的jar。也就是说,人们可能会争辩说,发布的内容实际上应该只是简单的jar,而重新包装的jar应该可以在独特的分类器下发布。 – 2014-10-06 16:40:01

+1

这是一个很好的建议,谢谢。 Spring Boot并没有将重新打包的jar作为单独的工件来处理,而是将当前jar任务的输出转换为适当的位置。我现在想知道是否应该更改,以便在Gradle构建中引用原始工件和重新打包的工件。我已经打开https://github.com/spring-projects/spring-boot/issues/1666。 – 2014-10-06 16:48:48

+0

在重新包装的jar上分配分类器[已经支持](http://docs.spring.io/spring-boot/docs/1.1.7.RELEASE/reference/htmlsingle/#build-tool-plugins-gradle-repackage -组态)。只需添加'bootRepackage {classifier ='boot'}即可。 – 2014-10-06 16:54:20

相关问题