如何在Maven中配置编码?

smtd7mpg  于 2023-08-03  发布在  Maven
关注(0)|答案(7)|浏览(136)

当我在多模块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>


. to my pom.xml.但它已经存在(在父pom.xml中)。
为maven-resources-plugin或maven-compiler-plugin配置<encoding>也不能解决这个问题。
那有什么问题

vom3gejh

vom3gejh1#

好的,我找到问题了。
我使用一些报告插件。在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>

字符串
另见http://maven.apache.org/general.html#encoding-warning

cidc1ykv

cidc1ykv2#

这将是除了以前,如果有人遇到一个问题,与scandic字母是解决不了上面的解决方案。
如果java源文件包含scandic字母,则需要由用于编译的Java正确解释它们。(例如常数中使用的Scandic字母)
即使这些文件是以UTF-8格式存储的,并且Maven被配置为使用UTF-8,Maven使用的系统Java仍然会使用系统默认值(例如:在Windows中:cp1252)。
只有通过maven运行测试时才能看到这一点(可能会在测试中打印这些常量的值)。打印出来的斯堪迪克字母会显示为'<?>')如果没有正确测试,这将破坏类文件作为编译结果,并不被注意。
为了防止这种情况,您必须将编译用Java设置为使用UTF-8编码。在maven pom.xml中有编码设置是不够的,你需要设置环境变量:JAVA_TOOL_OPTIONS = -Dfile.encoding=UTF8
此外,如果在Windows中使用Eclipse,您可能需要设置除此之外的编码(如果您通过Eclipse运行单独的测试)。

jv4diomz

jv4diomz3#

如果您合并上面的答案,最后为UTF-8配置的pom.xml应该是这样的。

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>

字符串

y0u0uwnf

y0u0uwnf4#

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

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

字符串
1.在代码中处理文件、字符串、IO时,始终显式地设置编码。如果您不遵循此规则,您的应用程序将依赖于环境。-Dfile.encoding=UTF8负责运行时环境配置,但我们不应该依赖它。如果您有数千个客户端,则需要花费更多的精力来配置系统并查找由此产生的问题。您只是对它有一个额外的依赖关系,可以通过显式设置来避免。Java中大多数使用默认编码的方法都因此被标记为已弃用。
1.确保您正在使用的内容也是您期望的相同编码。如果不是,前面的步骤都无关紧要!例如,如果一个文件的编码不是UTF8,但您期望它,它将不会被正确处理。要检查Linux上的文件编码:
$ file --mime F_PRDAUFT.dsv
1.强制客户端/服务器在请求/响应中显式设置编码,以下是示例:

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


希望这对某人有用。

n3ipq98p

n3ipq98p5#

试试这个:

<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>

字符串

clj7thdc

clj7thdc6#

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

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

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

8tntrjer

8tntrjer7#

(As 2023年,但实际上一直如此)
如果你使用Sping Boot ,你什么都不需要做。
它已经应用于父类属性中

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

字符串

    • 一般情况下**,上面这两行就足够了。

你不应该添加任何其他地方或插件,除非你知道你在做什么。
如果你看到建议做更多,很可能是过时的东西。

相关问题