gradle: Task :jar SKIPPED 当我用 gradlew build 得到我的 jar 时

Posted

技术标签:

【中文标题】gradle: Task :jar SKIPPED 当我用 gradlew build 得到我的 jar 时【英文标题】:gradle: Task :jar SKIPPED while I get my jar with gradlew build 【发布时间】:2020-10-03 05:58:12 【问题描述】:

我的问题是:为什么当我在 intellij 的 gradle 窗口中单击 jar 时看到“Task :jar SKIPPED”时,jar-creation 可以与 gradlew build 一起使用?以及如何在 IntelliJ 中修复它?

刚刚使用 spring 初始化程序创建了一些东西,并按原样在 intellij 中加载了项目。 (它是 org.springframework.boot, .. 'org.springframework.boot:spring-boot-starter-web') 我想知道 Task :jar SKIPPED(也没有创建 jar) 然后我发现当我从控制台启动时我得到了 jar。 (并且 jar 运行良好,它找到了主类 - 即使 build.gradle 中没有 jar manifest 属性)

(昨天我在 maven 中失败,“.jar 中没有主要清单属性)

【问题讨论】:

欢迎来到 SO。到目前为止,您到底尝试了什么?你的项目是使用 Gradle 还是 Maven?您运行了哪些命令以及如何运行?请查看how-to-ask 以澄清您的问题。 【参考方案1】:

这是因为 Springboot Gradle 插件将创建一个 bootJar 任务,默认情况下将禁用 jarwar 任务,如下所述:https://docs.spring.io/spring-boot/docs/current/gradle-plugin/reference/html/#packaging-executable-and-normal

所以您需要从 IDE 执行 bootJar 任务。在执行gradlew build 时,由于插件创建的任务依赖关系,任务bootJar 会自动执行。

在运行任务build(从控制台或IDE)时,您可以看到Gradle根据任务依赖关系执行的任务,例如:

> Task :backend:compileJava
> Task :backend:processResources
> Task :backend:classes
> Task :backend:bootJar      ## <== this is the task register by Springboot plugin, which produces the "Fat/executable" jar
> Task :backend:jar SKIPPED  ## <== task disabled by Springboot plugin
> Task :backend:assemble
> Task :backend:processTestResources
> Task :backend:testClasses
> Task :backend:test
> Task :backend:check
> Task :backend:build

您的意见

jar 运行良好,它找到了主类——即使没有 jar 清单 build.gradle 中的属性

Springboot 插件会自动为你配置这个,见:https://docs.spring.io/spring-boot/docs/current/gradle-plugin/reference/html/#packaging-executable-configuring-main-class

编辑 27-05-2021 从 Springboot 2.5 开始,jar 不再默认禁用。在发行说明中查看更多详细信息here

【讨论】:

以上是关于gradle: Task :jar SKIPPED 当我用 gradlew build 得到我的 jar 时的主要内容,如果未能解决你的问题,请参考以下文章

自定义Gradle Task实现一键批量部署Springboot应用

Gradle 中的Task

project和task

无法为 gradle 项目创建 JAR 文件

Gradle - 将单个文件添加到 JAR

Gradle:构建脚本概要