8

我正在开发一个基于 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>
 ....

从这一刻起,我的战争文件包含编码错误的资源包。例如,德语变音符号不再正确显示在我的 Web 应用程序中。当我禁用资源过滤时,一切都恢复了。

我找到的唯一解决方案是将属性 project.build.sourceEncoding 设置为“ISO-8859-1”

<properties>
  <project.build.sourceEncoding>ISO-8859-1</project.build.sourceEncoding>
</properties>

但我不明白为什么这是必要的?我所有的来源都是 UTF-8,而且我的应用程序也是基于 UTF-8 的?如果我需要添加一个资源包,例如日文字符,会发生什么?

我正在使用 Eclipse 4.2 和 Maven 3 在 linux 上开发

4

6 回答 6

4

您确定您的资源包 (.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像这里指示的那样配置在 Maven 中为不同的文件类型配置编码?

于 2014-04-06T05:15:06.950 回答
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>

链接到文档

于 2013-01-14T21:57:05.970 回答
1

我今天遇到了同样的问题。设置project.build.sourceEncoding为 UTF-8 将不起作用。所有过滤后的文件都将被复制进去ISO-8859-1(实际上我没有测试,但我确信它们没有被复制进去UTF-8)。
我的解决方案是声明两个<resource>部分。一个包含您真正需要过滤的所有文件。另一个用于复制其他资源并<filtering>设置为 false。
它对我有用,因为我不需要过滤 I18N 文件,并且构建时需要设置值的文件仅包含 ASCII 字符。

于 2015-02-25T13:49:34.373 回答
0

不是您问题的真正答案(抱歉),但我认为这是有关该物业的有用信息project.build.sourceEncoding

该属性是为了简化 maven 项目中的编码管理的尝试。

这个想法是,只要在其自身的插件配置中未指定编码,所有插件都将其用作默认编码值。是否使用此属性作为默认编码值只是对插件开发人员的建议。

我认为这是在所有主要和最近的插件中完成的,但一个重要的例外是 2.2 版之前的 maven-war-plugin

来源:

  • 关于project.build.sourceEncoding这里讨论。
  • 战争插件编码细节在这里
于 2013-01-16T11:09:59.233 回答
0

在 Windows>Preferences>General>Workspace 中有一个用于“文本文件编码”的单选按钮。我设置了 UTF-8,它破坏了我在代码中的所有特殊字符。

作为 Windows 中的默认值,我认为它是“Cp1252”。

于 2015-05-20T07:57:06.993 回答
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>

所以我有可能定义两个捆绑文件。一个包含正常的文本内容,包括元音变音等等,一个包含构建内容的技术包文件,如 ....

  • pom.version
  • 构建日期

…………

于 2019-07-17T15:12:14.133 回答