在 Eclipse 中从 Spring:boot 项目创建 war 文件
Posted
技术标签:
【中文标题】在 Eclipse 中从 Spring:boot 项目创建 war 文件【英文标题】:Create war file from Spring:boot project in Eclipse 【发布时间】:2018-06-03 03:33:19 【问题描述】:我是 Spring Boot 的新手,我已经完成了一个在我的本地主机上运行良好的应用程序。正如我被告知将其部署在我的本地主机之外的那样,例如 webbhotel 或 simular,我需要将项目导出为 war 文件而不是 jar 文件。
更新!! 我将项目作为在 Spring Initialzr 中生成的 Springproject 运行,并使用 Eclipse 作为 IDE。
在 Eclipse 中我已经按照步骤进行了
<packaging>war</packaging>
和
<dependencies>
<!-- … -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<!-- … -->
</dependencies>
来自 Spring Boot 参考页面 https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#howto-create-a-deployable-war-file
在我的项目中我使用
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
我是否需要添加 sprinng-boot-starter-tomcat 依赖项并在 tomcat-embed-jasper 上添加提供的依赖项,以便我的依赖项是这样的?
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
当我尝试在 Eclipse 中导出到 war-file 时,Eclipse 找不到我的项目。如果我尝试导出 Java>JAR FILE,它可以找到它,但如果我尝试 Web>WAR FILE
则找不到有谁知道我做错了什么以及是否需要导出到 WAR 文件以部署到外部服务器?
【问题讨论】:
不要使用 IDE 中的导出 JAR/WAR 功能...使用 maven 构建存档。 如何将项目导出到WAR?使用mvn package
或其他方式?如果执行 Maven 构建,它是否成功完成? Maven 构建完成后,您最终在 target
文件夹中看到了什么?
我已经尝试过 Eclipse 导出功能,如果我使用 maven 功能,我应该使用上面提到的两个依赖项还是使用 tomcat-embed-jasper 就足够了
我不知道从 cmd 编程 spring 和 maven。我使用 Spring intlzr 创建项目并使用 eclipse 进行编码和测试。在 localhost 上一切正常,程序运行正常。当我尝试导出项目时,Eclipse 工作中的唯一选择是导出为 jar 文件。所以我没有从 cmd 使用 maven build 或 maven 包
好吧,试一试,看看你最终会得到什么,如果你有任何问题,请回来。无论如何,对于任何严肃的 Java 开发,您都必须学习 Maven。忠告:编辑您的原始帖子以获取任何更新/问题/新问题(或创建新问题),而不是将其放入 cmets
【参考方案1】:
您需要在 @SpringBootApplication 中扩展 ****SpringBootServletInitializer****
war 文件生成不需要添加 ****spring-boot-starter-tomcat**** 依赖项
在 pom.xml 中使用下面的配置
<packaging>war</packaging>
为您的项目配置构建路径并选择 JDK
右键项目>运行方式>Maven安装
它将在目标文件夹中生成war文件。
复制此战争并部署到任何 Web/应用程序服务器(我已将其重命名为 demo.war)。
您可以使用您的主机名后跟端口和应用程序名称来访问该应用程序。
【讨论】:
超级!!感谢您的帮助! 以上步骤都对我有用。但是我在构建路径中添加了 ojdbc8.jar 作为外部 jar,它没有被复制到 war 文件的 lib 文件夹中。所以我得到了 'java.sql.SQLException: No适合的驱动程序找到'异常。任何人都可以在这里帮助我。 我已将 ojdbc8.jar 添加到 tomcat9/lib 文件夹中。 (tomcat9 是安装 tomcat 的地方。)我不知道为什么,但它对我有用。【参考方案2】:在 STS (Spring Tools Suite) 中生成 WAR 文件: 运行方式-> Maven 安装
【讨论】:
如果您要推荐 Spring Tools Suite,您应该首先建议 OP 添加它。此外,正如接受的答案中所述,包装应该是“战争”;在没有配置的情况下,仅运行mvn install
不会自动生成 WAR。【参考方案3】:
如果你想将spring boot项目部署为war文件,你需要遵循三个步骤:
扩展 SpringBootServletInitializer
@SpringBootApplication
public class DemoApplication extends SpringBootServletInitializer
public static void main(String[] args)
SpringApplication.run(DemoApplication.class, args);
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder)
return builder.sources(DemoApplication.class);
如果您使用多个主类,则定义启动类
<start-class>com.javavogue.DemoApplication</start-class>
更新打包到war pom.xml
packaging war packaging
将嵌入式 servlet 容器标记为已提供。在 pom 文件中。
参考:Deploy a Spring Boot WAR to Tomcat Server
【讨论】:
【参考方案4】:在pom.xml
改成<packaging>war</packaging>
后。
使用命令:mvn package
【讨论】:
【参考方案5】:您也可以通过选择菜单继续操作File -> Export -> Web -> War file
【讨论】:
【参考方案6】:我通过以下步骤生成了一个war文件:
-
添加上述依赖项。
打开命令提示符。
cd
进入您的项目目录。
运行命令:mvn clean install
。
然后会在目标目录下生成一个war文件。
【讨论】:
【参考方案7】:如果你使用的是maven,你可以添加标签来指定我们想要创建的类型——jar或者war。之后在 sts 中触发 maven 构建并指定目标 - 全新安装并指定要为构建运行的线程数。如果你想跳过测试用例,你可以给skipTest = true,或者如果你从命令提示符运行,你可以给-Dmaven.test.skip=true。 完成后,将在目标文件夹下生成war文件。 (除非我们指定特定的部署文件夹)
【讨论】:
以上是关于在 Eclipse 中从 Spring:boot 项目创建 war 文件的主要内容,如果未能解决你的问题,请参考以下文章
在 Spring Boot 中从 JWT 安全检查中排除 URL
如何在apache中从角度调用spring boot api