【问题标题】:Create war file from Spring:boot project in Eclipse在 Eclipse 中从 Spring:boot 项目创建 war 文件
【发布时间】: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

标签: java eclipse maven spring-boot war


【解决方案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文件,你需要遵循三个步骤:

  1. 扩展 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>
    
    1. 更新打包到war pom.xml

       packaging war packaging
      
    2. 将嵌入式 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文件:

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

        然后会在目标目录下生成一个war文件。

        【讨论】:

          【解决方案7】:

          如果你使用的是maven,你可以添加标签来指定我们想要创建的类型——jar或者war。之后在 sts 中触发 maven 构建并指定目标 - 全新安装并指定要为构建运行的线程数。如果你想跳过测试用例,你可以给skipTest = true,或者如果你从命令提示符运行,你可以给-Dmaven.test.skip=true。 完成后,将在目标文件夹下生成war文件。 (除非我们指定特定的部署文件夹)

          【讨论】:

            猜你喜欢
            • 2016-10-03
            • 2016-07-05
            • 1970-01-01
            • 2013-02-03
            • 1970-01-01
            • 2012-02-27
            • 2017-12-03
            • 2014-02-06
            • 1970-01-01
            相关资源
            最近更新 更多