我正在开发一个基于maven的web项目。在我的网络模块中,我使用不同语言的特定资源包(德语,西班牙语......)。 我所有的资源都是基于UTF-8而且一切正常。 现在有必要根据不同的maven配置文件来激活maven资源过滤来替换一些配置。
我的pom.xml:
.....
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
.....
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
....
从此刻起,我的war文件包含编码错误的资源包。例如,德语变音符号不再正确显示在我的Web应用程序中。 当我禁用资源过滤时,一切都很好。
我找到的唯一解决方案是将属性project.build.sourceEncoding设置为&#39; ISO-8859-1&#39;
<properties>
<project.build.sourceEncoding>ISO-8859-1</project.build.sourceEncoding>
</properties>
但我不明白为什么这是必要的?我的所有来源都是UTF-8,我的应用程序也是基于UTF-8? 如果我需要添加一个资源包 - 例如日文字符会怎么样?
我正在使用Eclipse 4.2和Maven 3在Linux上进行开发
答案 0 :(得分:4)
您可以在资源插件配置中指定编码,如下所示:
<project>
...
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.6</version>
<configuration>
...
<encoding>UTF-8</encoding>
...
</configuration>
</plugin>
</plugins>
...
</build>
...
</project>
答案 1 :(得分:3)
您确定资源包(.properties)正在使用UTF-8
吗?
java.util.Properties
假设资源包编码为ISO-8859-1
,请参阅http://docs.oracle.com/javase/6/docs/api/java/util/Properties.html#load(java.io.Reader),我认为Eclipse(以及IntelliJ IDEA)尊重这些文件的默认编码(.properties)。
因此,请使用文本编辑器检查项目源代码树中这些文件的当前编码,在Windows 记事本2 中可以帮助您解决此问题。
然后配置maven-resources-plugin
,如此处所示Configure encoding for different filetypes in maven?
答案 2 :(得分:1)
我今天遇到了同样的问题。将project.build.sourceEncoding
设置为UTF-8将不起作用。所有过滤后的文件都将被复制到ISO-8859-1
中(实际上我没有测试,但我确定它们未在UTF-8
中复制)。
我的解决方案是声明两个<resource>
部分。一个包含您真正需要过滤的所有文件。另一个将<filtering>
设置为false的其他资源复制
它对我有用,因为当构建只包含ASCII字符时,我不需要过滤I18N文件和需要设置值的文件。
答案 3 :(得分:0)
不是你的问题的答案(对不起),但我认为这是关于财产的有用信息project.build.sourceEncoding
此属性试图简化maven项目中的编码管理。
这个想法是,只要在插件配置中没有指定编码,所有插件都会将其用作默认编码值。 使用或不使用此属性作为默认编码值仅是插件开发人员的建议。
我认为这是在所有主要和最近的插件中完成的,但一个重要的例外是版本2.2之前的maven-war-plugin
来源:答案 4 :(得分:0)
在Windows&gt;偏好设置&gt;常规&gt;工作区中,有一个用于“文本文件编码”的单选按钮。我有UTF-8设置,它在代码中打破了我所有的特殊字符。
作为Windows中的默认值我认为是“Cp1252”。
答案 5 :(得分:0)
如果我们假设文件
BundleAppl.properties
是我要过滤的文件,但其他所有资源都不应:
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<includes>
<include>BundleAppl.properties</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
<filtering>false</filtering>
<excludes>
<exclude>BundleAppl.properties</exclude>
</excludes>
</resource>
</resources>
</build>
因此,我可以定义两个捆绑文件。一个带有普通文本的东西,包括Umlauts等,另一个是带有捆绑物的技术捆绑文件,如....
.......