我有一个 MyFaces Facelets 应用程序,其中页面编码有点粗糙。无论如何,它是用 Eclipse 开发并用 Ant 构建的,并且在 Tomcat 2.0.26 中运行良好。到目前为止,一切都很好。
现在,我宁愿用 Maven 构建,所以我制作了几个 pom 文件,在 Netbeans 中打开它们并构建,现在我有一个可以部署的 war 文件。但是,在任何 facelet 页面上,它都会吐出
com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: Invalid byte 1 of 1-byte UTF-8 sequence.
at com.sun.org.apache.xerces.internal.impl.io.UTF8Reader.invalidByte(UTF8Reader.java:684)
at com.sun.org.apache.xerces.internal.impl.io.UTF8Reader.read(UTF8Reader.java:554)
at com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.load(XMLEntityScanner.java:1742)
所以,我尝试了很多不同的东西,应用程序实际上运行了没有 facelet 东西的简单页面。但是,如果我只是用 Ant 构建,一切都会运行......所以我的问题是:可能导致这种情况的 ant 构建和 maven 构建之间最可能的区别是什么?
似乎即使我在 Netbeans 和 pom 文件中配置了 UTF-8,Netbeans 最终在经过一些编辑后最终将 facelet 文件报告为 ISO-8859-1。
我确保大多数中央库都是相同的版本(尤其是 xerces 2.3.0),我添加了一个无效的编码 servlet 过滤器。
而且,我宁愿修复 maven 构建并保留错误页面,而不是反过来……我打算介绍 Naven,而不是修复错误页面。
这是 pom.xml 关于编码的内容:
基本上 pom.xml 具有以下设置...
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.0.2</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
<encoding>${project.build.sourceEncoding}</encoding>>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.2</version>
<configuration>
<encoding>${project.build.sourceEncoding}</encoding>
</configuration>
</plugin>
....
<properties>
<netbeans.hint.deploy.server>Tomcat60</netbeans.hint.deploy.server>
<project.build.sourceEncoding>utf-8</project.build.sourceEncoding>
</properties>