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 的插件
将 Gradle.build 版本导入 Spring Boot
尝试使用 gradle bootrun 编译并获取找不到 spring-boot-gradle-plugin:1.4.0.BUILD-SNAPSHOT