Linux 筆記 #03# 在 Debian遠端伺服器上執行 Java socket程序

試圖做什么:把我的破程式碼放到伺服器上執行,併成功與客戶端進行 socket通訊

預備環境:剛安裝好 MySQL 和 JVM 的 Linux遠端伺服器(Debian 8)一臺。

主要有如下幾個步驟:

  1. 將編譯好的程式碼打包成可執行的 jar包 
  2. 在 Debian 上用 JDBC 連線 MySQL
  3. socket客戶端程序連線 socket服務端程序

 

1、將編譯好的程式碼打包成可執行的 jar包 

參考資料:[IntelliJ IDEA 2017.3 Help] Packaging a Module into a JAR File

設定 Artifacts 有兩個關鍵點,把程序入口寫入 MANIFEST.MF 以及把編譯後的程式碼新增進去(一定要包括依賴包,要不然丟伺服器上跑會出現 ClassNotFoundException),這樣才能建立可執行的 jar包。實測有效:

 

2、在 Debian 上用 JDBC 連線 MySQL

首先,需要在 Debian 上匯入相關的資料庫,把預先準備的 .sql 指令碼通過 Xftp 傳到伺服器上,傳輸好後執行如下操作:

readlink -f schema.sql # 取得 schema.sql 的絕對路徑並複製它!
mysql -u root -p
source /root/schema.sql # 匯入資料

 通過 netstat -tln 確認 MySQL 確實在監聽 3306 埠:

Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN     
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN  

 把 jar包傳送到伺服器(在這之前,請確認資料庫密碼是正確的!),並嘗試啟動它:

java -jar main.jar
Exception in thread "main" java.lang.UnsupportedClassVersionError: chatroom/main/ServerTest : Unsupported major.minor version 52.0
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:803)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)

(試求一下此時我的心理陰影面積)

 這個時候昨天寫的筆記就起作用了 Linux 筆記 #02# Installing MySQL & Installing the Default JRE/JDK ,找到原來的教程安裝另外一個版本的 JDK早知道這樣一開始就該安裝 Oracle JDK8

 

3、socket客戶端程序連線 socket服務端程序

大功告成圖:

剛開始連了好久連不上,然後谷歌了很久“如何開啟 debian xxx 埠”,最後才想起是沒有新增阿里雲的“安全組規則”,具體操作可以參考這個:阿里雲伺服器Tomcat無法從外部訪問

 

關鍵詞:java 伺服器 urlclassloader debian at socket 程序 jar mysql 筆記

相關推薦:

Pier integrated into spring, hibernation and Jersey apis using war

深入理解Java類載入器(2)

java.lang.UnsupportedClassVersionError

Day18 (一)類的載入器

maven-javadoc-plugin 出現錯誤Unsupported major.minor version 51.0

【原創】學習CGLIB動態代理中遇到的問題

kafka啟動出現:Unsupported major.minor version 52.0 錯誤

搭建Spark所遇過的坑