运行“mvn jetty:run”时,出现“3 字节的 UTF-8 序列的字节 3 无效......”。这是运行“mvn clean install”后xml配置文件的中文注释乱码问题(在mac上没问题,但是在windows上就报乱码),好几个月都没有解决。网上大体的解决方案有几种:
1.将pom文件中的配置节properties节点加入:
<project.build.sourceEncoding>utf-8</project.build.sourceEncoding>
2.将xml设置成utf-8,删除文件,新建后重新输入中文注释。
3.将<?xml version="1.0" encoding="UTF-8"?> 中的 encoding="UTF-8" 改成 encoding="UTF8" (无语)
以上3种方案,我测试了以后,发现全都无效。
于是继续googlet寻找答案...
终于发现了问题所在 ,我用的是maven-war-plugin :
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>${maven.war.plugin.version}</version>
<configuration>
<archive>
<addMavenDescriptor>false</addMavenDescriptor>
</archive>
<warName>${project.artifactId}</warName>
<webResources>
<resource>
<directory>src/main/resources/${package.environment}</directory>
<targetPath>WEB-INF/classes</targetPath>
<filtering>true</filtering>
</resource>
</webResources>
</configuration>
</plugin>
问题就出在这个plugin上,maven-war-plugin并没有encoding的设置节点,那么maven-war-plugin到底用什么编码执行呢?网上有人给出了答案:
1.在plugin版本低于2.3的情况下,源代码中发现encoding是null,也就是取操作系统默认的编码,而win环境默认是GBK,所以会乱码了。。。而且win不像Linux可以随意更改系统默认编码!!!所以用这个插件打包,有中文就坑了。。。。。这就是在mac上没问题,但是在win中乱码的原因。。。。汗!!!
解决方案:去掉xml配置文件中所有注释中的中文。
2.在plugin版本在2.3及以上的情况下,plugin的文档中发现:**resourceEncoding **默认取值正好是这个属性: ${project.build.sourceEncoding},所以我们需要pom文件中的配置节properties节点设置成<project.build.sourceEncoding>utf-8</project.build.sourceEncoding>。我看了一下我的plugin版本是2.1.1,我终于明白,为什么设置了也不生效了......