在 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改成&lt;packaging&gt;war&lt;/packaging&gt;后。

使用命令:mvn package

【讨论】:

【参考方案5】:

您也可以通过选择菜单继续操作File -&gt; Export -&gt; Web -&gt; 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

在 Spring Boot 中从 jwt 获取附加属性

在 CircleCi 中从 Spring Boot 访问 PostgreSQL 9.6

如何在 Spring Boot 中从双向表关系生成 DTO

如何在 Spring Boot 中从 mongodb 更改 geojson (GeoJsonPolygon) 的编组?