在Eclipse中从Spring:boot项目创建war文件

15

我对Spring Boot相当陌生,但是我已经完成了一个在本地工作良好的应用程序。因为有人告诉我需要将应用程序部署到本地以外的地方(例如网络托管或类似网站),所以我需要将项目导出为war文件而不是jar文件。

更新!! 我将项目作为由Spring Initialzr生成的Spring项目运行,并使用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>

我是否需要添加spring-boot-starter-tomcat依赖项并同时将provided添加到它和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文件时,Eclipse找不到我的项目。如果我尝试导出Java>JAR文件,它可以找到它,但如果我尝试Web>WAR文件,则找不到。

有人知道我做错了什么,以及是否需要导出WAR文件才能部署到外部服务器吗?


1
不要使用IDE中的导出JAR/WAR功能...请使用Maven构建您的存档。 - M. Deinum
你如何将项目导出为WAR文件?使用mvn package或其他方式?如果执行Maven构建,是否成功完成? 在Maven构建完成后,您会在target文件夹中看到什么? - Alex Savitsky
我已经尝试了Eclipse的导出功能,如果我使用Maven功能,我是否应该像我上面提到的那样同时使用这两个依赖项,还是只需要使用tomcat-embed-jasper就足够了? - bajen micke
我对使用命令行编程Spring和Maven没有任何了解。我使用Spring intlzr创建项目,使用Eclipse进行编码和测试。在本地主机上一切都正常运行,程序按预期运行。当我尝试导出项目时,Eclipse中唯一可用的选项是将其导出为jar文件。因此,我没有使用cmd中的maven build或maven package。 - bajen micke
1
好的,试一试看最后得到什么结果,如果有任何问题,请回来。无论如何,你都必须学习Maven,对于任何严肃的Java开发来说都是如此。一个建议:对于任何更新、问题或新问题,请编辑你的原始帖子(或创建一个新问题),而不是放在评论中。 - Alex Savitsky
谢谢,已经更新了问题。我打算学习Maven,但目前还没有它。 - bajen micke
7个回答

30

在您的 @SpringBootApplication 中需要扩展 ****SpringBootServletInitializer****。

为了生成 war 文件,您不需要添加 ****sprinng-boot-starter-tomcat**** 依赖项。

输入图像说明

在 pom.xml 中使用以下配置。

<packaging>war</packaging>

配置项目的构建路径并选择JDK

右键单击项目 > 运行为 > Maven Install

它将在target文件夹中生成war文件。

输入图像描述

复制该war文件并部署到任何Web/应用程序服务器(我已将其重命名为demo.war)。

您可以通过使用主机名、端口和应用程序名称访问该应用程序。

输入图像描述


1
太棒了!感谢你的帮助!! - bajen micke
以上步骤对我都有效。但是我在构建路径中添加了ojdbc8.jar作为外部jar包,它没有被复制到war文件的lib文件夹中。因此,我遇到了“java.sql.SQLException: No suitable driver found for”的异常。有人能帮我吗? - Gangs165700
我已将ojdbc8.jar添加到tomcat9/lib文件夹中(其中tomcat9是安装tomcat的位置)。我不知道为什么,但它对我起作用了。 - Gangs165700

1
在STS(Spring工具套件)中生成WAR文件的方法: 运行-> Maven Install

如果你要推荐Spring Tools Suite,你应该建议OP添加它。此外,正如接受的答案中所指出的那样,打包应该是“war”;仅运行'mvn install'不会自动产生WAR,除非进行了配置。 - DavidW

1

步骤1:通过扩展SpringBootServletInitializer创建ServletInitializer文件

public class ServletInitializer extends SpringBootServletInitializer {

@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
    return application.sources(DemoApplication.class);
}
}

第二步:在主类中使用 @SpringBootApplication

@SpringBootApplication
public class DemoApplication {

 public static void main(String[] args) {
    SpringApplication.run(DemoApplication.class, args);
 }
}

步骤三:在pom.xml中将打包类型设置为war

<packaging>war</packaging>

步骤4:- 将构建文件名命名为如下所示

<build>
 <finalName>demo</finalName>
</build>

步骤5:将外部Tomcat依赖项添加为提供的范围

<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-tomcat</artifactId>
        <scope>provided</scope>
    </dependency>

注意:为了参考,我在此添加了我的完成的pom.xml文件。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.7.7</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<name>demo</name>
<description>Demo project for Spring Boot</description>
<properties>
    <java.version>1.8</java.version>
</properties>
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-tomcat</artifactId>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

<build>
 <finalName>demo</finalName>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

0

您也可以通过选择菜单 文件 -> 导出 -> Web -> War 文件 进行操作。


0

我通过以下步骤生成了一个war文件:

  1. 添加上述依赖项。
  2. 打开命令提示符。
  3. cd进入您的项目目录。
  4. 运行命令:mvn clean install

然后,war文件将在目标目录中生成。


0
如果您正在使用Maven,可以添加标签来指定要创建的类型——jar或war。然后在STS中触发Maven构建,并指定目标——clean install,并指定要为构建运行的线程数。如果要跳过测试用例,可以给出skipTest=true,或者如果要从命令提示符中运行,则可以给出-Dmaven.test.skip=true。 完成后,war文件将生成在target文件夹下(除非我们指定一个特定的部署文件夹)。

0
pom.xml中更改为<packaging>war</packaging>后,使用命令mvn package

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接