SpringBoot项目打包和运行
打包为JAR包并运行
先实现一个入门案例:
package org.example.myapp;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class MyController {
@RequestMapping("/123")
public String hello() {
return "Hello World";
}
}
确保它可以正常运行。现在希望将该项目打包成一个JAR
包。不想再通过IDEA执行。
添加依赖
此时,需要添加一个打包插件(在pom.xml
中</dependencies>
后面添加):
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
(如果是通过spring initializr创建的项目,上述代码会自动添加)
执行package指令进行打包
现在就具备了打包的前提条件,只需要执行maven的打包(package)指令即可。
要执行这个指令有两种途径。
途径1——通过IDEA的可视化界面进行打包。找到如下界面,找到package双击即可,点击绿色箭头所指的按钮可跳过测试阶段:
途径2——命令行方式(需要设置maven的环境变量):
在有pom.xml文件的项目路径下,启动cmd,执行mvn clean package
指令。
采用mvn clean package -DskipTests
可跳过测试。
执行JAR
两种方式都可以获得JAR
包
可在target
文件夹下找到
可以将它复制到任意位置通过java -jar
指令执行。
打包为WAR包并运行
希望将上面项目改为打包成WAR包,需要做一些修改。
首先要修改pom.xml文件,然后添加一些代码。
声明打包方式为war
<groupId>org.example</groupId>
<artifactId>myapp</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<name>myapp</name>
<description>myapp</description>
在pom.xml
中添加<packaging>war</packaging>
排除内置Tomcat(可选)
此为教材中的步骤,不做也没事,具体是否有影响可以尝试探究。
添加Tomcat依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
注意<scope>provided</scope>
添加插件(必要)+指定项目打包后的名称(可选)
<build>
<finalName>myapp</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
修改SpringBoot启动类
这里不采用教材方式,教材中是直接去修改启动类代码。我们添加一个ServletInitializer
类:
public class ServletInitializer extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(MyappApplication.class);
}
}
修改完之后,依然通过命令行或是IDEA可视化界面进行打包,
得到xxx.war包,放在Tomcat安装目录下的webapps
文件夹下,通过Tomcat安装目录下bin目录中的startup.bat
命令启动Tomcat即可。
访问时候需要注意,不能通过http://localhost:8080/123
,而是要通过http://localhost:8080/xxx/123
。
相关问题
ServletInitializer
为何不需要用注解标注?
public class ServletInitializer extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(Demo1Application.class);
}
}
答:Servlet 容器(如 Tomcat)在启动时会自动识别并加SpringBootServletInitializer
类的子类,无需显式注解标注。
因此,类名ServletInitializer
是可以随便取的,关键是继承SpringBootServletInitializer
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
2018-02-28 Linux 笔记 #04# Installing Tomcat 8 on Debian