没有可执行jar的Spring Boot 2 Gradle插件
Posted
技术标签:
【中文标题】没有可执行jar的Spring Boot 2 Gradle插件【英文标题】:Spring Boot 2 Gradle plugin without executable jar 【发布时间】:2018-08-27 09:57:57 【问题描述】:如何配置 Spring Boot Gradle 插件 2 以禁用 Gradle Script Kotlin 中的引导分发。
我想要的发行版是一个包含所有依赖项(和 jar)的程序集包 zip,位于 lib 文件夹中。
我已启用 Jar 任务并禁用了 bootJar 任务。
我的构建文件的当前来源https://github.com/Skatteetaten/mokey/blob/825a81f20c21a2220876a09ebf7f01fe7c61f2fd/build.gradle.kts
注意 aurora skatteetaten gradle 插件添加了分发机制。 https://github.com/Skatteetaten/aurora-gradle-plugin
【问题讨论】:
如果你还没有真正描述你尝试过的东西,具体来说是什么阻止了你做你想做的事,这很难回答。您可以重新启用jar
任务并使用它来构建“普通” jar:docs.spring.io/spring-boot/docs/2.0.0.RELEASE/gradle-plugin/…。这有帮助吗?
我现在尝试编辑我的问题以使其更清晰。
愿你展示你的“gradle script kotlin”。
添加了对构建文件的引用,但请注意,您需要向 Gradle.properties 添加一些属性以使其按我看到的那样工作。
【参考方案1】:
配置应用程序插件后,Spring Boot 会创建一个额外的分发包,其中包含作为胖 jar 包的应用程序包。默认发行版保持不变,您应该能够在不禁用 Boot 发行版的情况下使用它。
默认分发依赖于标准的jar
任务。 Spring Boot 的插件默认禁用此任务,因为假设您希望使用 bootJar
生成的 fat jar 代替。如果不是这种情况,您可以像这样重新启用 jar:
jar
enabled = true
进行此更改后,您可以运行distZip
任务:
$: ./gradlew clean distZip --console=plain
:clean
:bootBuildInfo
:compileJava
:processResources
:classes
:jar
:startScripts
:distZip
BUILD SUCCESSFUL in 1s
7 actionable tasks: 7 executed
它将创建一个 zip 文件,将应用程序及其所有依赖项打包为单独的 jar 包,放在分发版的 lib
目录中。
$: unzip -l build/distributions/application-distribution-0.0.1-SNAPSHOT.zip
Archive: build/distributions/application-distribution-0.0.1-SNAPSHOT.zip
Length Date Time Name
--------- ---------- ----- ----
0 03-19-2018 07:31 application-distribution-0.0.1-SNAPSHOT/
0 03-19-2018 07:31 application-distribution-0.0.1-SNAPSHOT/lib/
1860 03-19-2018 07:31 application-distribution-0.0.1-SNAPSHOT/lib/application-distribution-0.0.1-SNAPSHOT.jar
588 03-01-2018 05:24 application-distribution-0.0.1-SNAPSHOT/lib/spring-boot-starter-web-2.0.0.RELEASE.jar
645 03-01-2018 05:24 application-distribution-0.0.1-SNAPSHOT/lib/spring-boot-starter-json-2.0.0.RELEASE.jar
592 03-01-2018 05:23 application-distribution-0.0.1-SNAPSHOT/lib/spring-boot-starter-2.0.0.RELEASE.jar
590 03-01-2018 05:24 application-distribution-0.0.1-SNAPSHOT/lib/spring-boot-starter-tomcat-2.0.0.RELEASE.jar
1117582 01-08-2018 11:43 application-distribution-0.0.1-SNAPSHOT/lib/hibernate-validator-6.0.7.Final.jar
782155 02-19-2018 10:08 application-distribution-0.0.1-SNAPSHOT/lib/spring-webmvc-5.0.4.RELEASE.jar
1244848 02-19-2018 10:08 application-distribution-0.0.1-SNAPSHOT/lib/spring-web-5.0.4.RELEASE.jar
1145432 03-01-2018 05:23 application-distribution-0.0.1-SNAPSHOT/lib/spring-boot-autoconfigure-2.0.0.RELEASE.jar
922427 03-01-2018 05:23 application-distribution-0.0.1-SNAPSHOT/lib/spring-boot-2.0.0.RELEASE.jar
613 03-01-2018 05:23 application-distribution-0.0.1-SNAPSHOT/lib/spring-boot-starter-logging-2.0.0.RELEASE.jar
26586 03-01-2018 05:23 application-distribution-0.0.1-SNAPSHOT/lib/javax.annotation-api-1.3.2.jar
1079064 02-19-2018 10:08 application-distribution-0.0.1-SNAPSHOT/lib/spring-context-5.0.4.RELEASE.jar
360034 02-19-2018 10:08 application-distribution-0.0.1-SNAPSHOT/lib/spring-aop-5.0.4.RELEASE.jar
654022 02-19-2018 10:08 application-distribution-0.0.1-SNAPSHOT/lib/spring-beans-5.0.4.RELEASE.jar
263410 02-19-2018 10:08 application-distribution-0.0.1-SNAPSHOT/lib/spring-expression-5.0.4.RELEASE.jar
1216414 02-19-2018 10:08 application-distribution-0.0.1-SNAPSHOT/lib/spring-core-5.0.4.RELEASE.jar
297518 10-24-2017 03:28 application-distribution-0.0.1-SNAPSHOT/lib/snakeyaml-1.19.jar
33391 01-30-2018 09:16 application-distribution-0.0.1-SNAPSHOT/lib/jackson-datatype-jdk8-2.9.4.jar
98261 01-30-2018 09:16 application-distribution-0.0.1-SNAPSHOT/lib/jackson-datatype-jsr310-2.9.4.jar
8643 01-30-2018 09:16 application-distribution-0.0.1-SNAPSHOT/lib/jackson-module-parameter-names-2.9.4.jar
1345154 01-30-2018 09:16 application-distribution-0.0.1-SNAPSHOT/lib/jackson-databind-2.9.4.jar
257309 02-14-2018 08:07 application-distribution-0.0.1-SNAPSHOT/lib/tomcat-embed-websocket-8.5.28.jar
3109223 02-14-2018 08:07 application-distribution-0.0.1-SNAPSHOT/lib/tomcat-embed-core-8.5.28.jar
240498 02-14-2018 08:07 application-distribution-0.0.1-SNAPSHOT/lib/tomcat-embed-el-8.5.28.jar
93107 01-08-2018 11:43 application-distribution-0.0.1-SNAPSHOT/lib/validation-api-2.0.1.Final.jar
66469 02-20-2018 12:53 application-distribution-0.0.1-SNAPSHOT/lib/jboss-logging-3.3.2.Final.jar
65100 09-19-2017 07:31 application-distribution-0.0.1-SNAPSHOT/lib/classmate-1.3.4.jar
290339 06-16-2017 04:40 application-distribution-0.0.1-SNAPSHOT/lib/logback-classic-1.2.3.jar
17519 11-28-2017 08:42 application-distribution-0.0.1-SNAPSHOT/lib/log4j-to-slf4j-2.10.0.jar
4596 03-27-2017 12:22 application-distribution-0.0.1-SNAPSHOT/lib/jul-to-slf4j-1.7.25.jar
15836 02-19-2018 10:08 application-distribution-0.0.1-SNAPSHOT/lib/spring-jcl-5.0.4.RELEASE.jar
66519 08-03-2017 05:28 application-distribution-0.0.1-SNAPSHOT/lib/jackson-annotations-2.9.0.jar
320923 01-30-2018 09:16 application-distribution-0.0.1-SNAPSHOT/lib/jackson-core-2.9.4.jar
471901 06-16-2017 04:40 application-distribution-0.0.1-SNAPSHOT/lib/logback-core-1.2.3.jar
41203 03-27-2017 12:22 application-distribution-0.0.1-SNAPSHOT/lib/slf4j-api-1.7.25.jar
255485 11-28-2017 08:42 application-distribution-0.0.1-SNAPSHOT/lib/log4j-api-2.10.0.jar
0 03-19-2018 07:31 application-distribution-0.0.1-SNAPSHOT/bin/
7002 03-19-2018 07:31 application-distribution-0.0.1-SNAPSHOT/bin/application-distribution
4042 03-19-2018 07:31 application-distribution-0.0.1-SNAPSHOT/bin/application-distribution.bat
--------- -------
15926900 42 files
【讨论】:
【参考方案2】:@panser 答案的这个 kotlin DSL 版本对我有用(禁用 spring-boot bootJar 任务并启用 jar 任务):
import org.springframework.boot.gradle.tasks.bundling.BootJar
tasks.getByName<BootJar>("bootJar")
enabled = false
tasks.getByName<Jar>("jar")
enabled = true
【讨论】:
【参考方案3】:在 spring-boot 2 中,当您应用应用程序和 maven 插件时,gradle 插件会重新配置构建以在 uploadArchives 任务中包含引导 tar 和 zip 分发。
从我从您的问题中可以看出,您想要一个包含所有 jar 文件的单个 zip 文件,类似于应用程序插件创建的内容,但想要排除 spring boot 插件添加的所有“额外”内容?如果是这种情况,那么告诉 gradle 就可以做到这一点很简单;
apply plugin: 'application'
apply plugin: 'maven'
jar.enabled = true
[bootJar, distTar, bootDistTar, bootDistZip]*.enabled = false
configurations.archives.artifacts.removeIf !it.archiveTask.is(distZip)
这很时髦,但希望您能够以类似的方式在您的 kotlin 文件中应用它。
【讨论】:
【参考方案4】:这对我有用(禁用 spring-boot bootJar 任务,并启用 jar)
apply plugin: 'java'
bootJar
enabled = false
【讨论】:
【参考方案5】:弹簧靴 2.x
我的项目是多模块的,每个模块都可以执行jar
根 build.gradle
subprojects
apply plugin: 'idea'
apply plugin: 'java'
apply plugin: 'org.springframework.boot'
bootJar enabled = true
jar enabled = true
子模块 build.gradle
bootJar
mainClassName = 'space.hi.HelloApplication'
然后你可以点击idea gradle插件的'Tasks/application or build'中的bootRun子模块,或者点击bootJar生成jar。
【讨论】:
以上是关于没有可执行jar的Spring Boot 2 Gradle插件的主要内容,如果未能解决你的问题,请参考以下文章
没有依赖关系的 Spring Boot 可执行 Jar 文件
Spring Boot + Gradle:如何构建可执行jar
Gradle 如何打包 Spring Boot 可执行 JAR