環境
- Windows 11
- 表示言語: 日本語
- システム ロケール: 日本語 (日本)
- ワールドワイド言語サポートで Unicode UTF-8 を使用 はチェックしていない
- JDK 17
- Maven 3.9
困りごと
以下の通り pom.xml を書いて cargo:run すると、Tomcat のログが文字化けしている。
pom.xml
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>cargo-run-test</artifactId>
<version>0.0.0-SNAPSHOT</version>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.cargo</groupId>
<artifactId>cargo-maven3-plugin</artifactId>
<version>1.10.14</version>
<configuration>
<container>
<containerId>tomcat9x</containerId>
</container>
</configuration>
</plugin>
</plugins>
</build>
</project>
解決方法 (その 1)
pom.xml に以下を追加
pom.xml
<properties>
<cargo.jvmargs>-Dfile.encoding=UTF-8</cargo.jvmargs>
</properties>
解決方法 (その 2)
- 一度、文字化けした状態で Tomcat を起動する
-
${project.basedir}/target/cargo/configurations/conf/logging.properties
を${project.basedir}/conf/logging.properties
にコピーする -
${project.basedir}/conf/logging.properties
に以下の行を追加java.util.logging.ConsoleHandler.encoding = UTF-8
- pom.xml を以下のように修正
pom.xml
<project> <modelVersion>4.0.0</modelVersion> <groupId>com.example</groupId> <artifactId>cargo-run-test</artifactId> <version>0.0.0-SNAPSHOT</version> <build> <plugins> <plugin> <groupId>org.codehaus.cargo</groupId> <artifactId>cargo-maven3-plugin</artifactId> <version>1.10.14</version> <configuration> <container> <containerId>tomcat9x</containerId> </container> <configuration> <configfiles> <configfile> <file>${project.basedir}/conf/logging.properties</file> <todir>conf</todir> </configfile> </configfiles> </configuration> </configuration> </plugin> </plugins> </build> </project>
- mvn clean cargo:run を実行
原因
cargo:run はログが UTF-8 で記録されることを期待しているが、java.util.logging.ConsoleHandler.encoding = UTF-8
がない場合にはコンソール エンコーディングが使われるため、ここで文字化けが発生する。
ログをコンソール エンコーディングで読み取るようにするのが本来の解決方法だと思われる。