SpringBoot在IDEA中以war打包
发布日期:2021-05-08 03:02:56 浏览次数:23 分类:原创文章

本文共 2891 字,大约阅读时间需要 9 分钟。

第一步

在pom.xml中将默认的jar方式改为war:

	...	<artifactId>homeworkme</artifactId>    <version>0.0.1-SNAPSHOT</version>    <name>homeworkme</name>    <description>Demo project for Spring Boot</description>    <!--默认为jar方式-->	<!--<packaging>jar</packaging>-->	<!--改为war方式-->    <packaging>war</packaging>    <properties>        <java.version>1.8</java.version>    </properties>    <dependencies>    ...    </dependencies>    ...

第二步

排除内置的Tomcat容器(两种方式):
1.排除spring-boot-starter-web中的Tomcat:

<dependency>    <groupId>org.springframework.boot</groupId>    <artifactId>spring-boot-starter-web</artifactId>    <exclusions>        <exclusion>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-tomcat</artifactId>        </exclusion>    </exclusions></dependency>

2.添加依赖:

<dependency>    <groupId>org.springframework.boot</groupId>    <artifactId>spring-boot-starter-tomcat</artifactId>    <!--打包的时候可以不用包进去,别的设施会提供。事实上该依赖理论上可以参与编译,测试,运行等周期。        相当于compile,但是打包阶段做了exclude操作-->    <scope>provided</scope></dependency>

第三步

在springBoot启动类的同级目录添加一个继承SpringBootServletInitializer 的类或者启动类继承该类,实现configure方法。

SpringBootServletInitializer源码注释:
Note that a WebApplicationInitializer is only needed if you are building a war file and deploying it.
If you prefer to run an embedded web server then you won’t need this at all.
注意,如果您正在构建WAR文件并部署它,则需要WebApplicationInitializer。
如果你喜欢运行一个嵌入式Web服务器,那么你根本不需要这个。

package com.example.homeworkme;import org.springframework.boot.builder.SpringApplicationBuilder;import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;public class ServletInitializer extends SpringBootServletInitializer {       public ServletInitializer() {           System.out.println("初始化ServletInitializer");    }    @Override    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {           return application.sources(HomeworkmeApplication.class);//启动类名    }}

第四步

为了防止应用上下文所导致的项目访问资源加载不到的问题,建议pom.xml文件中<build></build>标签下添加<finalName></finalName>标签,并设置maven打包时跳过单元测试:

<build>    <!-- 应与application.properties(或application.yml)中context-path保持一致 -->    <finalName>war包名称</finalName>    <plugins>        <plugin>             <groupId>org.apache.maven.plugins</groupId>             <artifactId>maven-surefire-plugin</artifactId>             <version>2.20.1</version>                <configuration>                    <!--true跳过测试-->                    <skipTests>true</skipTests>                </configuration>         </plugin>         <plugin>             <groupId>org.springframework.boot</groupId>             <artifactId>spring-boot-maven-plugin</artifactId>         </plugin>    </plugins></build>

第五步

通过maven命令进行打包或者在IDEA顶部菜单栏目中点击Build,再选择Build Artifacts,最后点击build,在项目的target目录下就会生成对应的war包。
在这里插入图片描述在这里插入图片描述

最后一步

将生成的war包放到tomcat的webapps目录下,通过ip/项目名访问即可。

注意

当以war包形式打包部署时,使用的是外部Tomcat,这个时候application.yml配置的端口将失效。

上一篇:进程和线程相关知识
下一篇:JAVA获取文件的mimeType

发表评论

最新留言

感谢大佬
[***.8.128.20]2025年03月30日 08时35分00秒