雖然 WTK 圖形介面已足夠日常開發,但理解命令行流程有助於建立自動化建構腳本、CI 整合或排查建構問題。本文以 WTK 2.5 內建 Games 範例為例,詳細拆解四大步驟對應的批次指令與關鍵參數。
set JAVAC="C:\Program Files\Java\jdk1.6\bin\javac.exe"
set PREVERIFY="C:\WTK2.5\bin\preverify.exe"
set JAR="C:\Program Files\Java\jdk1.6\bin\jar.exe"
set EMULATOR="C:\WTK2.5\bin\emulator.exe"
set CLDCAPI="C:\WTK2.5\lib\cldcapi10.jar"
set MIDPAPI="C:\WTK2.5\lib\midpapi20.jar"
set BOOTCP=%CLDCAPI%;%MIDPAPI%
%JAVAC% -bootclasspath %BOOTCP% -d tmpclasses -classpath tmpclasses %JAVA_FILES%
-bootclasspath:限制只能使用 CLDC/MIDP API,防止誤用 J2SE 類別。-d tmpclasses:輸出 .class 到暫存目錄。%PREVERIFY% -classpath %BOOTCP%;tmpclasses -d classes tmpclasses
classes/。ClassFormatError。%JAR% cmf MANIFEST.MF Demo.jar -C classes .
%JAR% uf Demo.jar -C res . # 追加資源檔(圖片、資料檔)
MANIFEST.MF 需包含 MIDlet-Name、MIDlet-Version、MIDlet-Vendor、MIDlet-1 等屬性。res/ 目錄,打包時保持相對路徑,程式中用 getResourceAsStream("/xxx.png") 讀取。%EMULATOR% -Xdescriptor:bin\Demo.jad
Demo.jad 為應用描述檔,內容與 Manifest 對應,並指定 MIDlet-Jar-URL: Demo.jar、MIDlet-Jar-Size。-Xjar:Demo.jar,但 JAD 為標準部署格式。@echo off
call setenv.bat
%JAVAC% -bootclasspath %BOOTCP% -d tmpclasses -classpath tmpclasses src\*.java
if errorlevel 1 goto END
%PREVERIFY% -classpath %BOOTCP%;tmpclasses -d classes tmpclasses
if errorlevel 1 goto END
%JAR% cmf MANIFEST.MF bin\Demo.jar -C classes .
%JAR% uf bin\Demo.jar -C res .
echo Build success.
:END
kvm.exe,執行皆透過 emulator.exe 載入 MIDlet。ktoolbar(編譯、打包、執行一鍵完成),命令行僅供自動化腳本參考。wtk2.5\docs\ant-tasks.html,可直接在 build.xml 中呼叫 wtkjavac、wtkpreverify、wtkpackage 任務。掌握命令行細節,讓 J2ME 專案也能納入現代化建構流程。