如何在Maven中配置编码?

rvpgvaaj  于 2023-10-17  发布在  Maven
关注(0)|答案(7)|浏览(131)

当我在我的多模块Maven项目上运行maven install时,我总是得到以下输出:

[WARNING] File encoding has not been set, using platform encoding UTF-8, i.e. build is platform dependent!

所以,我在谷歌上搜索了一下,但我所能找到的是我必须添加:

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

.到我的 pom.xml 文件。但是它已经在那里了(在父文件 * pom.xml * 中)。
maven-resources-pluginmaven-compiler-plugin 配置<encoding>也不能修复它。
那有什么问题

ygya80vv

ygya80vv1#

好的,我找到问题了。
我使用一些报告插件。在failsafe-maven-plugin的文档中,我发现<encoding>配置-当然-默认使用${project.reporting.outputEncoding}
因此,我将属性添加为project元素的子元素,现在一切都很好:

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
</properties>
  • 如何防止“使用平台编码(实际上是CP-1252)来复制已过滤的资源,即构建依赖于平台!“*.
jv4diomz

jv4diomz2#

如果有人遇到斯堪的纳维亚字母的问题,而这个问题不能用前面的答案解决,这将是对前面的答案的补充。
如果Java源文件包含斯堪的纳维亚字母,则需要由用于编译Java正确解释它们(例如,常量中使用的斯堪的纳维亚字母)。
即使文件以UTF-8格式存储,并且Maven配置为使用UTF-8,Maven使用的 system Java仍将使用系统默认值(例如,在Windows中:Windows-1252)。
只有通过Maven运行测试时才能看到这一点(可能会在测试中打印这些常量的值)。印刷的斯堪的纳维亚字母将显示为“<?如果没有正确测试,这将破坏作为编译结果的类文件,并被忽略。
为了防止这种情况,您必须将用于编译的Java设置为使用UTF-8编码。在Maven pom.xml 文件中有编码设置是不够的;你需要设置环境变量:

JAVA_TOOL_OPTIONS = -Dfile.encoding=UTF8

此外,如果在Windows中使用Eclipse,您可能需要设置除此之外使用的编码(如果您通过Eclipse运行单独的测试)。

qlckcl4x

qlckcl4x3#

如果你合并前面的答案,这里最后是一个 pom.xml,配置为UTF-8,应该是这样的。

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<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">

    <modelVersion>4.0.0</modelVersion>

    <groupId>YOUR_COMPANY</groupId>
    <artifactId>YOUR_APP</artifactId>
    <version>1.0.0-SNAPSHOT</version>

    <properties>
        <project.java.version>1.8</project.java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    </properties>

    <dependencies>
        <!-- Your dependencies -->
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.7.0</version>
                <configuration>
                    <source>${project.java.version}</source>
                    <target>${project.java.version}</target>
                    <encoding>${project.build.sourceEncoding}</encoding>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-resources-plugin</artifactId>
                <version>3.0.2</version>
                <configuration>
                    <encoding>${project.build.sourceEncoding}</encoding>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>
7tofc5zh

7tofc5zh4#

人们似乎将内容编码与构建的文件/资源编码混合在一起。只有Maven属性是不够的。-Dfile.encoding=UTF8是无效的。为了避免编码问题,您应该遵循以下简单规则:
1.设置Maven编码,如上所述:

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

1.在代码中处理文件、字符串和I/O时,始终显式设置编码。如果不遵循此规则,则应用程序将依赖于环境。-Dfile.encoding=UTF8确实负责运行时环境配置,但我们不应该依赖它。如果您有数千个客户端,则需要花费更多的精力来配置系统并查找问题。你只需要对它有一个额外的依赖,你可以通过显式地设置它来避免。Java中使用默认编码的大多数方法都因此被标记为已弃用。
1.确保您正在处理的内容也采用了与您预期相同的编码。如果不是,那么前面的步骤就不重要了!例如,如果一个文件的编码不是UTF-8,但你期望它,它将不会被正确处理。要在Linux上检查文件编码,请执行以下操作:

file --mime F_PRDAUFT.dsv

1.强制客户端/服务器在请求/响应中显式设置编码。以下是一些例子:

@Produces("application/json; charset=UTF-8")
@Consumes("application/json; charset=UTF-8")
vq8itlhq

vq8itlhq5#

试试这个:

<project>
  ...
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-resources-plugin</artifactId>
        <version>2.7</version>
        <configuration>
          ...
          <encoding>UTF-8</encoding>
          ...
        </configuration>
      </plugin>
    </plugins>
    ...
  </build>
  ...
</project>
umuewwlo

umuewwlo6#

在我的例子中,我使用的是maven-dependency-plugin,所以为了解决这个问题,我必须添加以下属性:

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

参见Apache Maven Resources Plugin / Specifying a character encoding scheme

x3naxklr

x3naxklr7#

(As 2023年,但实际上一直如此)
如果你使用Sping Boot ,你不需要做任何事情。
它已经在父级中应用了这些属性。

<properties>
    ...
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF8</project.reporting.outputEncoding>
    ...
</properties>

在一般情况下,上面这两行就足够了。
你不应该在任何其他地方或插件添加东西,除非你知道你在做什么。
如果你看到建议做更多,很可能是过时的东西。

相关问题