読者です 読者をやめる 読者になる 読者になる

xerces でutf-8なXMLの日本語コメントの解析に失敗してエラー

java maven

Eclipseではテストが通るのに、maven2で実行するとこんなエラーが出る。

org.xml.sax.SAXParseException: Invalid byte 3 of 3-byte UTF-8 sequence.

とか、

java.io.UTFDataFormatException: invalid byte 3 of 3-byte UTF-8 sequence (0x3f)


原因は色々考えられるが、今回の場合は$PROJECT_ROOT/src/main/resources配下のエンコーディング指定がデフォルトのままだったことが原因。


pom.xmlに以下のようにリソースディレクトリを追加したら、

    <resources>
      <resource>
        <directory>src/main/resources</directory>
        <filtering>true</filtering>
      </resource>
    </resources>

同じくpom.xmlに最低でも

    <build>
      〜(省略)〜
      <plugin> 
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-resources-plugin</artifactId> 
        <configuration> 
          <encoding>utf-8</encoding> 
        </configuration> 
      </plugin> 
      〜(省略)〜
    </build>

という指定を追加する必要がある。(デフォルトエンコーディングと同じエンコーディングでリソースを記述していればいいけど、明記したほうが無難)


まあ、propertiesとかを使っていれば、native2asciiを自動でかけるとかの設定をする(※)と思うので、こんなことで2時間強もはまらないんだろうな。

http://www.oikaze.jp/~tamada/Diary/2006-09-11-3.htmlとか。