Gradle Build 后 Spring Boot 应用程序的主类丢失

Posted

技术标签:

【中文标题】Gradle Build 后 Spring Boot 应用程序的主类丢失【英文标题】:Main-Class for Spring Boot Application goes missing after Gradle Build 【发布时间】:2016-12-18 17:15:05 【问题描述】:

我在 Bamboo 中为我正在开发的 Spring-Boot 应用程序创建了一个构建计划。当我部署并尝试启动应用程序时,我收到以下错误。

没有主清单属性,在 MyApp.jar 中

我从版本控制中检查了我的 Manifest.MF 文件:

Manifest-Version:1.0Main-Class:com.applications.MyApplication

然后我在构建后检查了 Manifest.MF:

清单版本:1.0 实现-标题:Spring Boot Data REST Starter 实施版本:1.4.0.RELEASE 存档器版本:Plexus 存档器 建造者:竹子 规格供应商:Pivotal Software, Inc. 规范-标题:Spring Boot Data REST Starter 实施-供应商-Id:org.springframework.boot 实施供应商:Pivotal Software, Inc. 创建者:Apache Maven 3.2.1 构建-Jdk:1.8.0_60 规范版本:1.4.0.RELEASE 实现 URL:http://projects.spring.io/spring-boot/

请注意缺少 Main-Class 属性。

我是 *Bamboo by Atlassian 的新手,我正在使用 Bob Swift Atlassian 插件 - Groovy 任务,其中包括用于 Gradle 构建的任务。

以前有人见过这种行为吗?关于解决方案或变通方法的任何想法?

【问题讨论】:

这是一个非常奇怪的清单,它似乎是直接从spring-boot-starter-data-rest 复制而来的。您提到您正在使用 Gradle,但清单是由 Maven 创建的。您是否尝试过本地构建并检查构建的 jar 中的内容? 我正在使用 Spring Boot/IntelliJ 提供的 build.gradle 文件。我没有对其进行任何更改。我在本地运行它,结果相同 我在 Oracle 的 Java 站点找到了一个解决方法:docs.oracle.com/javase/tutorial/deployment/jar/appman.html。它位于使用 JAR 工具设置入口点部分下。 它还在,只是没有显示。检查您在 IDE 之外的文件资源管理器以确保。您的配置设置为 java 8。您在构建路径中有哪个版本?有时版本不匹配会这样做。 【参考方案1】:

这个问题的解决方法很简单。在我的系统上,我从命令行使用 Gradle 构建了我的 jar,并创建了一个可执行 jar 以及正确的 MANIFEST.MF。在 Bamboo 中,我使用了一个简单的内联脚本和 Gradle 包装器,并获得了与我的系统相同的结果。在我的研究中,我发现 IntelliJ misses several key Spring Boot tasks。这里学到的重要教训是:“从命令行构建

【讨论】:

以上是关于Gradle Build 后 Spring Boot 应用程序的主类丢失的主要内容,如果未能解决你的问题,请参考以下文章

在父 build.gradle 中找不到 ID 为 spring-boot 的插件

在spring源码中new一个moudle

在春季教程之后,Gradle Build 失败并出现异常

将 Gradle.build 版本导入 Spring Boot

尝试使用 gradle bootrun 编译并获取找不到 spring-boot-gradle-plugin:1.4.0.BUILD-SNAPSHOT

当我在开发模式下停止应用程序并将 build.gradle.kts 与 spring boot 一起使用时出错