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 版本並安裝。
安裝 Gradle
https://gradle.org/releases/ 下載最新 Gradle 版本 binary-only。解開後改名為 gradle,置於 c:\ 之下,然後將 C:\gradle\bin 設定於系統 path 變數中。
Extension 擴充包
VSCode 預設並不支援 Java,所以需由 Extension 下載 Extension pack for Java 及 Gradle for Java 二個擴充包。安裝 Extension pack for Java 時,會自動下載 Gradle for Java。
Ant 專案
VSCode 預設就是使用 Ant 的模式開啟專案,執行時會在指令上打上所有參數,適用於單一檔案或不複雜的專案。實際的專案中,最好在專案下新增 src 及 lib,然後把 .java 程式碼寫在 src 之內。
project/ ├─ src/ └─ lib/
無論是在 Windows 或 Linux,輸入如下指令執行程式。
cd src
java -cp "../lib/*" C02.java
或是
cd src
javac -d ../out -cp "../lib/*" C02.java
cd out
java -cp ".;./lib/*" C02
在Windows 下,「.;」 是在目前的目錄找 .class,然後去「./lib/*」找其它的 .class 及 .jar。沒有「.;」無法執行。
在 Linux 下必需使用「.:./lib/*」執行,如下所示
java -cp ".:./lib/*" C02
編譯自訂 sdk
假設我們的自訂 sdk 目錄如下
project/ ├─ src/ │ └─ net/ │ └─ ddns/ │ └─ mahaljsp/ │ ├─ np.java │ ├─ os.java │ └─ mysql/ │ ├─ mysql.java │ ├─ PyConnection.java
在 Power Shell (VSCode Terminal) 執行如下指令,將 sdk 打包成 .jar,然後置於 lib 之下。
Get-ChildItem -Recurse -Filter *.java src | % { $_.FullName } > sources.txt
$sources = Get-Content sources.txt
javac -d out $sources
jar cvf lib/mahaljsp.jar -C out .
在 Linux 下可使用如下指令
javac -d out $(find src -name "*.java") jar cvf ./lib/mahaljsp.jar -C out .
Gradle 專案
專案由多個 .java 檔案組成,並且引用多個 .jar 套件時,通常會形成較為複雜的編譯與相依性管理需求,此時需使用 Gradle 進行建置與依賴管理,提升開發效率與專案可維護性。
使用 Gradle 需在 VSCode 安裝 Gradle for Java,然後 Ctrl+Shift+p,選取 Create Java Project,再選取Groovy
快速鍵
Ctrl+Shift+p / Task: Run Task / +Configure a Task Gradle Run,輸入如下指令
{
"version": "2.0.0",
"tasks": [
{
"label": "Gradle Run",
"type": "shell",
"command": "./gradlew run",
"group": "build",
"problemMatcher": []
}
]
}
然後 Ctrl+Shift+p /Open Keyboard shurtcuts(JSON),加入如下
{
"key": "shift+f7",
"command": "workbench.action.tasks.runTask",
"args": "Gradle Run"
}
build.gradle
app 之下的 build.gradle 是個很重要的設定檔,裏面的 dependencies 設定要下載的 lib,比如下面藍色的 mysql driver,執行時會下載到 C:\Users\登入者\.gradle\caches\modules-2\files-2.1\com.mysql 之下。
dependencies {
testImplementation libs.junit.jupiter
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
implementation libs.guava
testImplementation platform('org.junit:junit-bom:5.10.0')
testImplementation 'org.junit.jupiter:junit-jupiter'
implementation("com.mysql:mysql-connector-j:8.3.0")
}
application 的 mainClass 記錄程式進入點,如下所示。
application {
mainClass = 'game.App'
}
MANIFEST.MF
當日後打包成 .jar 檔時,需在 MANIFEST.MF 包含 Main-Class,需在 build.gradle 最後面加入如下設定。
jar {
manifest {
attributes(
'Main-Class': 'net.ddns.mahaljsp.Game.App'
)
}
}
執行
gradle run
編譯並打包
使用如下指令可將專案編譯打包成 .jar 檔,置於 app/build/libs 之下
gradle build
執行 jar
gradle build 並不會把 mysql 等 .jar 包進去,所以需把 mysql 的 .jar 檔 copy 到 libs 下,然後指定 -cp 參數如下。
java -cp "app.jar;./*" game.App
安裝檔
使用如下指令產生安裝檔
gradle installDist
會在專案下產生 app\build\install\app 目錄,裏面有 bin 及 lib 目錄。
bin 目錄是啟動腳本。而 lib 則是包含所有相依性的 jar,包含了 app.jar。
進入 bin 後執行 ./app 即可執行。
./app
lib 下即然包含了所有的 jar,所以也可以用如下指令執行
java -cp "app.jar;./*" game.App
maven
maven 不如 gradle 靈活,但現今大部份企業還是採用 maven,所以僅作記錄用。
todo
