第1章
構成管理入門  

第2章
Subversionによるバージョン管理入門

第3章
Subversionベストプラクティス

第4章
Maven2によるビルド入門

第5章
Maven2ベストプラクティスリリースの自動化

第6章
リリースの自動化

Appendix
Maven 2はまり道


※WEB+DB PRESS Vol.39掲載の記事を載せています。

Appendix Maven2はまり道

Authors:BABA Yasuyuki

はまりその4 エンコーディングの設定を忘れずに

リストaのような日本語を含んだソースをMaven2でコンパイルをしたときに、図aのようなエラーになってし まうことがあります。 メッセージを見ただけだと文字列が閉じてないように思えますが、いやいや、何度確認してもちゃんと閉じ てます。

●リストa コンパイルするソース
package invalidencoding;

public class EncodingSample {
  
  public String getMessage() {
    return "確認をしてください。";
  }
}

●図a こんなコンパイルエラー
[INFO]
---------------------------------------------------
[ERROR] BUILD FAILURE
[INFO]
---------------------------------------------------
[INFO] Compilation failure
/home/user/workspace/invalid-encoding/src/main/java/
invalidencoding/Messages.java:[6,9] 文字列リテラルが
閉じられていません。
[INFO]
---------------------------------------------------
[INFO] For more information, run Maven with the -e
switch
[INFO]
---------------------------------------------------
これは、コンパイラがソースの文字コードを正しく認識できていないために起きたエラーです。 コンパイラは、ソースがOSのエンコーディングで書かれていることを前提にコンパイルします。 最近はソースコードのエンコーディングをUTF-8で書くことが増えてきましたが、WindowsだとOSのエンコー ディングはWindows-31Jです。 ソース中の日本語の部分で文字が正しく認識されないために、「"」(ダブルクォート)で閉じる前に文字列 が終わったと認識されてしまい、このようなエラーとなってしまうわけです。
javacコマンドだと-Dfile.encoding=UTF-8としてソースのエンコーディングを指定できますが、 Maven 2の場合はpom.xml上にmavencompier-pluginのオプションとして指定します(リストb)。

●リストb エンコーディングの設定
<project>
  …
  <build>
    <pluginManagement>
      <plugins>
        <plugin>
          <artifactId>maven-compiler-plugin</artifactId>
          <configuration>
            <source>1.5</source>
            <target>1.5</target>
            <encoding>UTF-8</encoding>
          </configuration>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>
  …
</project>
普段IDEで作業しているとIDEが自動的にエンコーディングを処理してくれるため、ついつい忘れがちです。 ほかのプラグインでもエンコーディングを指定しないと文字化けしたり、おかしな動きをすることがあるの で、そのときはまずエンコーディングの指定を確認してみてください。