続々々Mavenトラブル事例。

Tomcatプラグイン1.2.1で、日本語を含むJSPをプリコンパイルすると、

 hoge_jsp.java:10: 警告: この文字は、エンコーディング MS932 にマップできません。

のような警告がでます。
そのままビルドはできますが、Tomcatにデプロイしてアクセスすると
日本語が文字化けしてしまいます。

原因は、JSPプリコンパイル時の文字コードが、UTF-8固定になっていることにあります。

JSPをプリコンパイルするTomcatのプリコンパイラ(org.apache.jasper.JspC)では、
生成するServletのソースコードのデフォルト文字コードがUTF-8になっています。
Windowsで開発している場合はソースコードはMS932で書くことが多く、
コンパイル時もMS932を指定するので、ここで文字化けが起こってしまうのです。

対応としては、TomcatプラグインのJellyスクリプトを改造するしかありません。
(Tomcatプラグインには、プリコンパイル時の文字コードを指定するプロパティ
は用意されていないようです)

Tomcatプラグインのplugin.jellyに、_jspcと言うゴールがあり、
その中でjasper2タスクが実行されるようになっています。

jasper2タスクには、javaEncodingプロパティが用意されているので、
これを使って文字コードを指定するようにすればOKです。

<jasper2 validateXml="false"
  uriroot="${maven.war.webapp.dir}"
  webXmlFragment="${maven.build.dir}/tomcat/src/WEB-INF/generated_web.xml"
  addWebXmlMappings="true"
  outputDir="${maven.build.dir}/tomcat/src/java"
  javaEncoding="MS932"/>

Secret

TrackBackURL
→http://bagineer.blog59.fc2.com/tb.php/29-54e54a9d