首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Jikes 編譯器加入 Encoding 支援:Windows 平台原始碼編譯完整指南

     編輯:Java 相關知識

背景動機

  • Jikes:IBM 開源 Java 編譯器,速度遠快於 javac,適合大專案 JSP 預編譯
  • 痛點:官方 Windows 二進位釋出缺少 -encoding 參數支援,中文原始碼編譯亂碼
  • 解決:從原始碼編譯,鏈結 libiconv 實現字元集轉換

環境準備

工具版本/來源用途
MinGW最新 SourceForgeGCC 編譯器套件
MSYS配套 MinGW提供 Unix-like Shell 環境
Jikes 原始碼1.18 SourceForge (1.22 編譯失敗)目標編譯器
libiconv1.8 libiconv-1.8.tar.gz字元集轉換庫

編譯步驟

1. 安裝 MinGW + MSYS

  • 先裝 MinGW (如 C:\MinGWStudio\MinGW)
  • 再裝 MSYS,安裝過程會詢問 gcc.exe 路徑,輸入 Unix 格式:C:/MinGWStudio/MinGW
  • 桌面捷徑啟動 MSYS 進入編譯環境

2. 編譯 libiconv

$ 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。

3. 編譯 Jikes 1.18

$ 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 符號。

4. 取得成果

$ ls jikes-build/src/jikes.exe
# 複製至專案工具目錄,測試編碼參數
$ ./jikes.exe -encoding UTF-8 Test.java

常見問題排查

現象原因對策
configure 找不到 iconv.hCPPFLAGS 路徑錯誤確認 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/ 格式

整合至建構流程

Ant 範例

<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>

現代替代方案

  • Eclipse JDT Compiler (ECJ):org.eclipse.jdt.core:ecj,支援增量編譯、-encoding、現代 Java 版本,Maven/Gradle 直接引用
  • Maven JSPC Plugin:org.apache.maven.plugins:maven-jspc-plugin 整合 ECJ
  • Gradle JSP Plugin:com.bmuschko:gradle-jsp-plugin
  • Spring Boot:內嵌 Tomcat/Jetty/Undertow,開發期無需預編譯,生產期可選 AOT 編譯

總結

通過 MinGW/MSYS + libiconv 從原始碼編譯 Jikes 1.18,可獲得支援 -encoding 的 Windows 原生執行檔,解決大專案 JSP 預編譯中文亂碼與速度問題。但 Jikes 專案已停止維護 (最後釋出 2009 年),新專案強烈建議遷移至 ECJ 或現代建構工具鏈。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved