VSCode 優勢
VSCode 的遠端連線、第三方支援,遠比 NetBeans 更好,所以建議使用 VSCode 進行 Java 程式開發。
OpenJDK
首先到 https://learn.microsoft.com/en-us/java/openjdk/download 下載 OpenJDK 21 版本並安裝。
安裝 VSCode
請先到 https://code.visualstudio.com/Download 下載 System installer 版本並安裝。
Extension 擴充包
VSCode 預設並不支援 Java,所以需由 Extension 下載 Extension pack for Java 及 Gradle for Java 二個擴充包。安裝 Extension pack for Java 時,會自動下載 Gradle for Java。
VSCode 教學
進行教學時,每天有不同的主題,可新增當日日期 (20260429) 作為目錄,然後新增子目錄「p01_xxx」,此子目錄是一個新的主題。在子目錄再新增 App.java 作為程式的進入點。
App.java 的第一行加入 package,如下
package p01_類別;
public class App {
public static void main(String[] args) {
Pokemon p1=new Pokemon();
System.out.println(p1.level);
}
}
class Pokemon{
int level=10;
}
以上作法就算每個子目錄有相同的類別名稱也不會相衝。
package 名稱不可使用數字開頭,故加入「p」。package 名可以使用中文,方便中文語系的人閱讀。
編譯自訂 SDK
假設我們的自訂 sdk 目錄如下
project/ ├─ src/ │ └─ net/ │ └─ ddns/ │ └─ mahaljsp/ │ ├─ np.java │ ├─ os.java │ └─ mysql/ │ ├─ mysql.java │ ├─ PyConnection.java
在 Power Shell (VSCode Terminal) 執行如下指令,將 sdk 打包成 mahaljsp .jar,然後置於 libs 之下。
Get-ChildItem -Recurse -Filter *.java src | % { $_.FullName } > sources.txt
$sources = Get-Content sources.txt
javac -d out $sources
jar cvf ./libs/mahaljsp.jar -C out .
javac -d out $sources 就是把所有的 java 都編譯成 .class,然後置於專案下的 out 目錄。
jar 的「-C out」是指要切進 out 目錄中,然後「.」是指 out 裏所有的檔案。
在 Linux 下可使用如下指令
javac -d out $(find src -name "*.java") jar cvf ./libs/mahaljsp.jar -C out .
jar 在作什麼
jar 就是在 out 裏新增 META-INF 目錄,然後在裏面新增 MANEFEST.MF 檔案。
MANIFEST.MF 檔案內容如下
Manifest-Version: 1.0 Created-By: 21.0.10 (Microsoft)
請注意,MANIFEST.MF 最後一行一定要空白行,不然會讀不到。
然後將 out 內的所有檔案及目錄選取,壓縮成 mahaljsp.zip 檔,然後將副檔名 .zip 改成 .jar 檔。
注意上述的 sdk,就算沒有 META-INF 一樣可以使用。
Ant 專案
VSCode 預設就是使用 Ant 模式開啟專案,執行時會在指令上打上所有參數,適用於單一檔案或不複雜的專案。
實際的專案中,最好在專案下新增 src 及 lib,然後把 .java 程式碼寫在 src 之內。
project/ ├─ src/ └─ libs/
settings.json 設定
VSCode 預設只會在 lib 目錄找相關的 library。若希望也能尋找 libs 目錄,可在 VSCode 按下 Ctrl+Shift+p,選擇 Preferences: Open user Settings(JSON) ,新增如下設定。
打包成 jar
在專案下根目錄裏增 MANIFEST.MF 設定如下。請注意最後一定要有一行空白行。
Manifest-Version: 1.0 Main-Class: C01 Class-Path: libs/mahaljsp.jar
編譯成 C01.class 並置於 out 之內
javac -d out -cp "./libs/*" src/C01.java
將 C01.class 打包成 C01.jar
jar cfm C01.jar MANIFEST.MF -C out .
將 C01.jar 及 libs copy 到其它電腦,即可使用如下指令執行。
java -jar C01.jar
java -cp 及 -jar 不可同時並存,因為 -jar 會使用 MANIFEST.MF 的 Class-Path 取代 -cp。
包含 mahaljsp.jar 的作法
把 mahaljsp.jar 包進 C01.jar 是不能使用的,所以有另一種作法。
假設 C01.class 在 out 目錄下,則要把 mahaljsp.jar 解開置於 out 之下,詳細目錄結構如下。
├─ out/ │ ├── net/ │ │ └─ ddns/ │ │ └─ mahaljsp/ │ │ ├─ np.class │ │ ├─ os.class │ │ └─ mysql/ │ │ ├─ mysql.class │ │ ├─ PyConnection.class │ ├─ C01.class
然後使用如下指令打包
jar cfm out.jar MANIFEST.MF -C out .
最後使用如下指令執行
java -jar out.jar
Gradle 專案
專案由多個 .java 檔案組成,並且引用多個 .jar 套件時,通常會形成較為複雜的編譯與相依性管理需求,此時需使用 Gradle 進行建置與依賴管理,提升開發效率與專案可維護性。
安裝 Gradle
https://gradle.org/releases/ 下載最新 Gradle 版本 binary-only。解開後改名為 gradle,置於 c:\ 之下,然後將 C:\gradle\bin 設定於系統 path 變數中。
VSCode 擴充包
VSCode Extension 需安裝 Gradle for Java。
開啟專案
Ctrl + Shift + p,選取 Java: Create Java Project,再選取 Gradle,然後指定目錄,比如 e:\java\gradle\mix,再選取 Groovy,然後專案名直接按 enter。
右下角若有出現 A build file was modified. Do you want to synchronize the java classpath/configureation? 按下 Always。
AppTest 錯誤
app\src\test\java\mix\AppTest.java 是以後大型專案要作單元測試用的,一般人都用不到,所以需先刪除掉。
自訂 sdk
請在 app 下新增 libs,將 mahaljsp.jar copy 到 libs 下,然後在 build.gradle 的 dependencies 新增如下設定。
