【问题标题】:Can't produce an executable jar from Spring Boot, Gradle, and IntelliJ-Idea无法从 Spring Boot、Gradle 和 IntelliJ-Idea 生成可执行 jar
【发布时间】:2016-12-30 20:25:18
【问题描述】:

我使用 IntelliJ-Idea 和 Gradle 作为构建引擎创建了一个 Spring Boot 微服务。我没有对初始 Spring Boot 配置进行任何更改。我也没有对提供的 build.gradle 文件进行任何修改。我通过 IntelliJ-Idea 使用 starter.spring.io 构建了应用程序,并具有以下依赖项:

compile('org.springframework.boot:spring-boot-starter-data-jpa')
compile('org.springframework.boot:spring-boot-devtools')
compile('org.springframework.boot:spring-boot-starter-web')
runtime('org.postgresql:postgresql')
testCompile('org.springframework.boot:spring-boot-starter-test')

该应用程序目前包含 12 个类和 2 个接口,是一个 Web 服务提供者。它在我的系统上运行良好,但是当我使用 Gradle 构建时,Manifest.MF 不包含 Main-Class 条目。

我创建了一个非常简单的 Hello World 应用,并尝试了多种 IDE 和构建工具(Gradle 和 Maven)的组合 并得到以下结果:

有趣的是,我能够在 Eclipse 中生成可执行 jar,它有一个单独的 Runnable JAR Export 进程。

我对 IntelliJ 和 Gradle 还很陌生。有没有人见过这种行为?有什么想法我在 IntelliJ 中可能做错了吗?如果有人需要,我已经将我的 Hello World 项目压缩了。

【问题讨论】:

  • 您应该(实际上必须)使用 gradle(或 maven)来创建工件而不是 IDE 的导出功能。否则,特定的 Spring Boot 插件将无法运行,并且您的 jar 格式将不正确。

标签: intellij-idea gradle spring-boot


【解决方案1】:

我听取了 M 的建议。 Denium 和我从命令行构建了 Gradle。创建的 jar 格式正确,可以执行。一切都像一个魅力。事实上,Main-Class 是一个名为 org.springframework.boot.loader.JarLauncher 的 Spring Boot 类,而我的应用程序的主类位于一个名为 Start-Class 的属性中. IDE 完全错过了这一点。

【讨论】:

    【解决方案2】:

    看起来你需要为 gradle 包含 spring boot 插件 - org.springframework.boot:spring-boot-gradle-plugin

    更多详情在gradle section of the getting started guide

    【讨论】:

      猜你喜欢
      • 2017-07-02
      • 1970-01-01
      • 2017-09-15
      • 2018-04-06
      • 1970-01-01
      • 1970-01-01
      • 2016-02-09
      • 1970-01-01
      • 2014-10-26
      相关资源
      最近更新 更多