javac,適合大專案 JSP 預編譯-encoding 參數支援,中文原始碼編譯亂碼libiconv 實現字元集轉換| 工具 | 版本/來源 | 用途 |
|---|---|---|
| MinGW | 最新 SourceForge | GCC 編譯器套件 |
| MSYS | 配套 MinGW | 提供 Unix-like Shell 環境 |
| Jikes 原始碼 | 1.18 SourceForge (1.22 編譯失敗) | 目標編譯器 |
| libiconv | 1.8 libiconv-1.8.tar.gz | 字元集轉換庫 |
C:\MinGWStudio\MinGW)gcc.exe 路徑,輸入 Unix 格式:C:/MinGWStudio/MinGW$ tar xvzf /c/temp/libiconv-1.8.tar.gz
$ mkdir libiconv-build
$ cd libiconv-build
$ ../libiconv-1.8/configure --enable-extra-encodings --enable-static --disable-shared
$ make
$ cd ..
產出靜態庫 libiconv-build/lib/.libs/libiconv.a 與頭文件 libiconv-build/include/iconv.h。
$ tar xvjf /c/temp/jikes-1.18.tar.bz2
$ mkdir jikes-build
$ cd jikes-build
$ ../jikes-1.18/configure \
CPPFLAGS=-I/c/temp/libiconv-build/include \
LDFLAGS=-L/c/temp/libiconv-build/lib/.libs
$ make
關鍵:CPPFLAGS 指定頭文件路徑,LDFLAGS 指定靜態庫路徑,確保鏈結時找到 iconv_open、iconv、iconv_close 符號。
$ ls jikes-build/src/jikes.exe
# 複製至專案工具目錄,測試編碼參數
$ ./jikes.exe -encoding UTF-8 Test.java
| 現象 | 原因 | 對策 |
|---|---|---|
configure 找不到 iconv.h | CPPFLAGS 路徑錯誤 | 確認 libiconv-build/include 存在 iconv.h |
鏈結錯誤 undefined reference to `libiconv_open' | LDFLAGS 路徑錯或未編譯 libiconv | 重新編譯 libiconv,確認 .libs/libiconv.a 存在 |
編譯通過但 -encoding 無效 | Jikes 版本不支援或未正確鏈結 | 使用 1.18 版本,確認 jikes -help 顯示 encoding 選項 |
| MSYS 中路徑轉換錯誤 | Windows 路徑含空格或特殊字元 | 安裝路徑避免空格,使用 /c/temp/ 格式 |
<target name="compile-jsp">
<taskdef name="jspc" classname="org.apache.jasper.JspC" classpathref="tomcat.classpath"/>
<jspc
destdir="${build.dir}/jspc"
srcdir="${web.dir}"
compiler="jikes"
compilerclasspath="${tools.dir}/jikes.exe"
verbose="9"
ieplugin="no"
>
<compilerarg value="-encoding"/>
<compilerarg value="UTF-8"/>
</jspc>
</target>
org.eclipse.jdt.core:ecj,支援增量編譯、-encoding、現代 Java 版本,Maven/Gradle 直接引用org.apache.maven.plugins:maven-jspc-plugin 整合 ECJcom.bmuschko:gradle-jsp-plugin通過 MinGW/MSYS + libiconv 從原始碼編譯 Jikes 1.18,可獲得支援 -encoding 的 Windows 原生執行檔,解決大專案 JSP 預編譯中文亂碼與速度問題。但 Jikes 專案已停止維護 (最後釋出 2009 年),新專案強烈建議遷移至 ECJ 或現代建構工具鏈。