部署 Spring Boot 項目

上傳 jar 包

之前在新建 Spring Boot 項目 [1] 使用mvn install的方式,已經構建出 jar 包。

通過 scp 或 rz/sz,將該 jar 包上傳到服務器

執行java -jar hello-0.0.1-SNAPSHOT.jar, 發生如下報錯:

Exception in thread "main" java.lang.UnsupportedClassVersionError: tech/dashen/hello/HelloApplication has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0
 at java.lang.ClassLoader.defineClass1(Native Method)
 at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
 at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
 at java.net.URLClassLoader.defineClass(URLClassLoader.java:468)
 at java.net.URLClassLoader.access$100(URLClassLoader.java:74)
 at java.net.URLClassLoader$1.run(URLClassLoader.java:369)
 at java.net.URLClassLoader$1.run(URLClassLoader.java:363)
 at java.security.AccessController.doPrivileged(Native Method)
 at java.net.URLClassLoader.findClass(URLClassLoader.java:362)
 at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
 at org.springframework.boot.loader.LaunchedURLClassLoader.loadClass(LaunchedURLClassLoader.java:151)
 at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
 at java.lang.Class.forName0(Native Method)
 at java.lang.Class.forName(Class.java:348)
 at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:46)
 at org.springframework.boot.loader.Launcher.launch(Launcher.java:108)
 at org.springframework.boot.loader.Launcher.launch(Launcher.java:58)
 at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:88)

這是由於編譯環境運行環境不一致導致:

本機執行 java -version

openjdk version "17.0.2" 2022-01-18
OpenJDK Runtime Environment (build 17.0.2+8-86)
OpenJDK 64-Bit Server VM (build 17.0.2+8-86, mixed mode, sharing)

服務器上執行 java -version

java version "1.8.0_211"
Java(TM) SE Runtime Environment (build 1.8.0_211-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.211-b12, mixed mode)

服務器 安裝 / 更新 Java 版本

通過cat .bashrc查看之前 Java 的配置:

#java
export JAVA_HOME=/usr/local/java/jdk1.8.0_211
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH

切換到/usr/local/java下:

可發現之前是使用直接下載 & 編譯的方式安裝

決定這次依然不使用 apt-get 的方式。

在 此處 [2] 找到對應平臺的 Java 17,複製下載地址

使用wget + 下載地址下載到當前目錄,

sudo tar -zxvf jdk-17_linux-x64_bin.tar.gz, 解壓出jdk-17.0.2文件夾

修改.bashrc中 Java 的路徑:

#java
export JAVA_HOME=/usr/local/java/jdk-17.0.2
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH

再去之前的目錄下執行java -jar hello-0.0.1-SNAPSHOT.jar命令


可參考此 [3],nohup java -jar hello-0.0.1-SNAPSHOT.jar >temp.txt &, 讓進程在後臺運行。並會把日誌文件輸入到指定的 temp.txt 中

服務器 放開 8080 端口

參考騰訊雲服務器安全組設置開放 8080 端口 [4]:

再請求服務器公網 ip:8080/cui, 如預期


關於 Java 的版本

依據 一文搞懂 JDK8 與 Java1.8 的區別 [5],

從 JDK1.5/JDK5 開始,命名方式由之前的 1.x,改成了 x

故而 DK1.8/JDK8 是新舊命令方式導致的同一個東西的不同稱謂。

即  Java8、JDK8、JDK1.8 都是同一個東西

當前最新的版本是 Java 17

Java 版本歷史

參考資料

[1]

新建 Spring Boot 項目: https://dashen.tech/2022/02/01/%E6%96%B0%E5%BB%BASpring-Boot%E9%A1%B9%E7%9B%AE/

[2]

此處: https://www.oracle.com/java/technologies/downloads/#jdk17-linux

[3]

此: https://blog.csdn.net/qq_22638399/article/details/81506448

[4]

騰訊雲服務器安全組設置開放 8080 端口: https://www.txyfwq.com/anquanzu/8080duankou.html

[5]

一文搞懂 JDK8 與 Java1.8 的區別: https://blog.csdn.net/qq_44895681/article/details/105365655

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/uy1ayqZxYwyI_mHwyjcaXg