2012-02-02 53 views
2

我目前正在使用一个使用JAXB的Maven插件。问题是,无论我在IntelliJ还是在控制台中启动全新安装,我都没有得到相同的结果。 JAXB正在读取以UTF-8编码的XML文件,其中包含特殊字符。使用mvn编译时的编码问题

在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“,bu不同的行为。

当然,我配置了我的pom.xml正确使用属性是这样的:

<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

我也尝试添加一个名为“file.encoding的”第二个属性,但它并不能帮助。

我的问题是:为什么这个系统属性的位置会改变我的程序的行为,当我从命令行运行mvn时,如何解决我的问题?

在此先感谢。

+1

您使用JAXB的代码在Maven构建期间运行,对不对?另外,你为什么认为这些字符被错误地读取?也许他们不能在控制台输出中表现出来。 – axtavt 2012-02-02 17:02:53

+0

是的,它在Maven构建过程中运行。我确定这些字符被错误地读取,因为我使用JAXB解组生成的对象来生成输出文件。这些文件在IntelliJ中生成时是正确的,但在从控制台生成时不正确。另外,如果我从控制台运行正确的命令,我可以在控制台输出中看到正确的字符:) – 2012-02-02 17:37:44

+0

复制http:// stackoverflow。com/questions/1431008 – 2012-06-04 11:10:00

回答

1

正如otherquestions建议,在JVM与每次使用读者默认的文件编码(通常是系统文件的编码)开始而作家在没有明确编码的情况下使用。在运行时覆盖系统属性file.encoding不会更改此行为,如果您希望将其作为默认编码,则在启动JVM时必须指定-Dfile.encoding

要解决我的问题,我在我的Maven插件重用project.build.sourceEncoding(我有一个自定义插件这个问题)来覆盖file.encoding在运行时,并使用此file.encoding实例InputStreamReaderOutputStreamWriter有一个明确的编码为第二个参数。

当资源被UTF-8中的maven-resource-plugin正确复制时,我的问题就没有了:D。

0

也许尝试包括这个XML在你的pom.xml文件:

<project> 
    [...] 
    <build> 
    [...] 
    <plugin> 
     <artifactId>maven-resources-plugin</artifactId> 
     <version>2.4.3</version> 
     <configuration> 
     <encoding>UTF-8</encoding> 
     </configuration> 
    </plugin> 

    <plugin> 
     <artifactId>maven-compiler-plugin</artifactId> 
     <version>2.3.2</version> 
     <configuration> 
     <source>1.6</source> 
     <target>1.6</source> 
     <encoding>UTF-8</encoding> 
     </configuration> 
    </plugin> 
    </build> 
</project> 
+0

我试过这个,但不幸的是它没有帮助。事实上,我注意到Maven已经在使用正确的编码,我可以将其视为INFO日志。我再次在资源/文件中检查了复制的文件,这是正确的。问题发生在稍后,当我的Maven插件在生成源代码阶段读取XML时。 – 2012-02-02 21:16:19