功能开发完成后,服务肯定不能跑在我们本地的IDEA中,需要将代码打包并放在一台服务器上运行:
对SpringBoot项目打包(执行Maven构建指令package)
# 清除之前的target
# mvn clean
mvn package
也可在IDEA中双击Lifecycle.package:
生成一个可运行的SpringBoot的jar包:
Open In -> Explorer后打开cmd窗口
,运行项目(执行启动指令)
java –jar springboot-xxx.jar
可能出现的情况:xx.jar中没有主清单属性
,这和打的包有关 => SpringBoot的打包插件
使用SpringBoot提供的maven插件可以将工程打包成可执行jar包
<build>
<plugins>
<plugin>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-maven-pluginartifactId>
plugin>
plugins>
build>
SpringBoot为了让这个jar能独立运行,它要将工程中所使用的所有jar包都打到这一个工程包下,因此也叫Fat Jar
:
再看 jar包描述文件(MANIFEST.MF)
,普通的jar的内容是:
Manifest-Version: 1.0
Implementation-Title: springboot_08_ssmp
Implementation-Version: 0.0.1-SNAPSHOT
Build-Jdk-Spec: 1.8
Created-By: Maven Jar Plugin 3.2.0
基于spring-boot-maven-plugin打包的工程:
Manifest-Version: 1.0
Spring-Boot-Classpath-Index: BOOT-INF/classpath.idx
Implementation-Title: springboot_08_ssmp
Implementation-Version: 0.0.1-SNAPSHOT
Spring-Boot-Layers-Index: BOOT-INF/layers.idx
Start-Class: com.demo.SSMPApplication # 我的启动引导类
Spring-Boot-Classes: BOOT-INF/classes/
Spring-Boot-Lib: BOOT-INF/lib/
Build-Jdk-Spec: 1.8
Spring-Boot-Version: 2.5.4
Created-By: Maven Jar Plugin 3.2.0
Main-Class: org.springframework.boot.loader.JarLauncher # jar的启动器类
Fat jar的启动Main方法是JarLauncher:
它负责创建一个LaunchedURLClassLoader来加载boot-lib下面所依赖的那些jar:
并以一个新线程启动应用的Main方法(找到manifest文件中的Start-Class):
createMainMethodRunner方法中则传入了我主程序的引导类:
引入maven-plugin打包插件后,mvn package仍得到一个普通jar包
阿里云网址下创建的SpringBoot工程,skip为true时,只会生产本项目代码相关的包,而不会加入引入和启动类加载器等包,该jar包自然也不能运行,需要改为false才能打出可运行的jar包。
mvn clean package -D spring-boot.repackage.skip=false
这样,以后打包就很灵活,两种jar包都能打,而不用刻意注释掉打包插件。
Windows下解除端口占用
以下指令的端口号、PID可以不用加双引号。
# 查询所有端口
netstat -ano
# 查询指定端口,得到占用这个端口的PID
netstat -ano |findstr "端口号"
# 根据进程PID查询进程名称
tasklist |findstr "进程PID号"
# 根据PID杀死任务
taskkill /f /pid "进程PID号"
# 根据进程名称杀死任务(波及范围太大,一般不用)
taskkill -f -t -im "进程名称"
在Linux下安装Java环境:
yum install java-1.8.0-openjdk.x86_64
查看版本:
java -version
将jar包拷贝到Linux后开始运行:
java -jar springboot-xx.jar
但当前shell中Ctrl +C 会中止程序运行,因此需要使用nohup命令:
nohup java -jar springboot-xxx.jar > server.log 2>&1 &
此时想中止服务运行,可:
ps -ef |grep -i "java -jar"
kill -9 PID