gradle: Task :jar SKIPPED 当我使用 gradlew build 获取 jar 时

sKn*_*nak 6 manifest gradle gradlew spring-boot

我的问题是:当我在 intellij 的 gradle 窗口中单击 jar 时,为什么 jar-creation 与 gradlew build 一起工作,而我看到“Task :jar SKIPPED”?我该如何在 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 中没有主要清单属性”)

M.R*_*uti 13

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

因此,您需要bootJar从 IDE执行task 。当执行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
Run Code Online (Sandbox Code Playgroud)

对于您的评论

jar 运行良好,它找到了主类 - 即使在 build.gradle 中没有 jar manifest 属性

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,默认情况下不再禁用。在此处查看发行说明中的​​更多详细信息