【发布时间】:2012-02-25 07:54:12
【问题描述】:
我目前正在开发一个使用 JAXB 的 Maven 插件。问题是,无论我是在 IntelliJ 中还是在控制台中启动全新安装,我都不会得到相同的结果。 JAXB 正在读取以 UTF-8 编码的 XML 文件,其中包含特殊字符。
在 IntelliJ 中,读取这些字符没有任何问题。 但在控制台中,这些字符被替换为“?” (如果我执行 sysout,我可以看到它)。
找到了我的问题的根源,但是我不是很明白,也不知道怎么解决:IntelliJ运行mvn时,增加了一个额外的参数-Dfile.encoding=UTF-8
java -classpath /usr/share/maven/boot/plexus-classworlds-2.4.jar -Dclassworlds.conf=/usr/share/maven/bin/m2.conf -Dmaven.home=/usr/share/maven -Dfile.encoding=UTF-8 org.codehaus.plexus.classworlds.launcher.Launcher clean install
当我在命令行中运行 mvn 时,我可以添加这个额外的参数,但它会出现在 类名之后:
java -classpath /usr/share/maven/boot/plexus-classworlds-2.4.jar -Dclassworlds.conf=/usr/share/maven/bin/m2.conf -Dmaven.home=/usr/share/maven org.codehaus.plexus.classworlds.launcher.Launcher -Dfile.encoding=UTF-8 clean install
在这两种情况下,如果我 sysout 的 System.getProperty("file.encoding") 的内容,我会得到相同的值“UTF-8”,但行为不同。
当然,我使用这样的属性正确配置了我的 pom.xml:
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
我还尝试添加名为“file.encoding”的第二个属性,但没有帮助。
我的问题是:为什么这个系统属性的位置会改变我的程序的行为,当我从命令行运行 mvn 时如何解决我的问题?
提前致谢。
【问题讨论】:
-
您使用 JAXB 的代码在 Maven 构建期间运行,对吗?另外,您为什么认为这些字符被错误地读取?也许它们只是无法在控制台输出中表示。
-
是的,它在 Maven 构建期间运行。我确信这些字符被错误地读取,因为我使用由 JAXB 解组的对象来生成输出文件。这些文件在 IntelliJ 中生成时是正确的,但从控制台生成时不正确。另外,如果我从控制台运行正确的命令,我可以在控制台输出中看到正确的字符:)
标签: java maven-2 character-encoding intellij-idea