2007年1月31日

Maven 2 Report Plugins Encoding

最近努力在玩 Maven 2 ,放棄 Maven 1 及 Ant 的其中一個原因當然是因為 Maven 2 可以產出一份完整的軟體專案報告。

不管是在 Linux 平台或是 Windows 系統中執行 mvn site 時,如果 pom.xml 中有填入中文訊息時就會發現產製出來的報表中摻雜著一堆看不懂的亂碼(在 Maven 1 時只有 Windows 系統中有亂碼),即使去改 pom.xml 加入 <?xml encoding="utf-8" ?> 宣告也一樣失敗,一度讓我懷疑起跳槽到 Maven 2 是不是一個錯誤的決定。

所幸,最後在 CodeHaus 中找到兩個與檔案編碼有關的設定項目:inputEncoding 及 outputEncoding,只要在相應的 plugin 宣告段落中加以指定即可解決亂碼問題,而且是 Linux / Windows 平台皆有效。

以下是宣告範例:

<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
...刪除…
<plugins>
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-site-plugin</artifactId>
    <version>2.0-SNAPSHOT</version>
    <configuration>
      <locales>en</locales>
      <inputEncoding>UTF-8</inputEncoding>
      <outputEncoding>UTF-8</outputEncoding>
    </configuration>
  </plugin>
</plugins>
...刪除…
</project>

※Maven 官網上的 encoding 相關說明:大致上來說就是要找 plugin 所提供的 goal 說明。

  1. compiler:testCompile
  2. Specifying a character encoding scheme
  3. site:stage-deploy
※例外:javadoc 這個 plugin 大概是惟一的例外吧,它使用 docencoding 指定輸出檔編碼系統,見 javadoc:jar,不過我測試過後發現它… 沒路用… =.=

※ 2007-02-03:javadoc plugin 中要正確顯示指定的編碼系統時,尚需指定 charset 之值,如:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-javadoc-plugin</artifactId>
  <configuration>
    <charset>UTF-8</charset>
    <encoding>UTF-8</encoding>
    <docencoding>UTF-8</docencoding>
    <links>
      <link>http://java.sun.com/j2se/1.5.0/docs/api</link>
    </links>
  </configuration>
</plugin>