在eclipse中将Spring Boot应用程序导出为JAR文件

Posted

技术标签:

【中文标题】在eclipse中将Spring Boot应用程序导出为JAR文件【英文标题】:Exporting Spring Boot application as JAR file in eclipse 【发布时间】:2016-08-29 04:50:12 【问题描述】:

我在 Eclipse 中使用 Spring STS 创建一个简单的基于 Web 的 Spring Boot 项目。我可以在 Eclipse 中很好地运行它,但是当我尝试将它导出为 JAR 文件时,我得到:

rg.springframework.context.ApplicationContextException: Unable to start embedded container; nested exception is org.springframework.context.ApplicationContextException: Unable to start EmbeddedWebApplicationContext due to missing EmbeddedServletContainerFactory bean.

我的public static void main位于Application.java,带有@SpringBootApplication注解。

我已经仔细检查了所有 Maven 依赖项一百次。

我做错了什么?

【问题讨论】:

运行 mvn package 会给你一个工作的 jar 吗? @chrylis 我不知道如何运行mvn 命令,bash 找不到它。 【参考方案1】:

很可能,您正在使用内置的 Eclipse 导出器来生成您的 jar,它只包含该项目中实际生成的目标文件。为了拥有一个“胖”(独立可执行)jar,您需要使用 Spring Boot Maven 或 Gradle 插件来“重新打包”该 jar。

首先,确保 you have the repackage goal included in your build setup,然后使用 Maven package 目标。最简单的方法是从命令行运行mvn package(您可能需要为您的操作系统安装 Maven CLI 包);您还可以右键单击 Eclipse 中的 POM 和“运行方式”以在 Eclipse 中执行特定的 Maven 操作。

【讨论】:

太棒了!!你回答的最后一部分对我有用,我没有意识到我必须用 Maven“运行”pom.xml。真是太感谢你了。 @ViggoLundén 很高兴为您提供帮助。我确实建议熟悉从 CLI 运行 Maven(就像 Git),因为它是 CI 工具等使用的“官方”方法(它提供所谓的“一步构建”),并且 M2Eclipse 有一个如果您不从 CLI 进行预推送测试,一些细微的错误(主要与类路径有关)可能会咬到您。【参考方案2】:

这是一个单行命令,在窗口 7/10 机器上,带有命令提示符到您的项目文件夹(在您的项目工作区中)。我不使用 Eclipse IDE POM maven 目标,但您也可以使用 maven 目标。在窗口机器上我更喜欢 cmd.exe 来导出和运行。

mvnw clean package

基于unix内核

./mvnw clean package

您必须进入工作区,而不是进入项目根文件夹。您将看到一个 maven 包装器 mvnw,您不需要安装 maven,并且同一级别的 .mvn 文件夹为此提供了必要的 jar。 对于一个项目

D:\workspace\Zuteller Workspace\zusteller>mvnw clean package

它会在target文件夹的同级文件夹中创建zusteller-0.0.1-SNAPSHOT.jar

D:\workspace\Zuteller Workspace\zusteller>java -jar target\zusteller-0.0.1-SNAPSHOT.jar

您可以运行自包含应用程序(嵌入式 Tomcat)并在 localhost:8080/您的项目中访问

【讨论】:

以上是关于在eclipse中将Spring Boot应用程序导出为JAR文件的主要内容,如果未能解决你的问题,请参考以下文章

spring boot应用程序作为maven依赖项[重复]

在 Spring Boot 中将未知请求重定向到 index.html

Jackson 在 Spring Boot Rest 应用程序中将日期更改为一天。

如何在 Eclipse 本身中运行 Spring Boot Web 应用程序?

如何在 Spring Boot 应用程序中将用户添加到嵌入式 tomcat?

如何在 Wildfly 中将外部属性文件加载到 Spring Boot