当我跑步时 maven install 在我的多模块 Maven 项目中,我总是得到以下输出:

[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).

配置 <encoding> 对于 maven-resources-plugin 或 maven-compiler-plugin 也无法修复它。

所以有什么问题?

有帮助吗?

解决方案

好的,我发现问题了。

我使用一些报告插件。在failsafe-maven-plugin的文档中(http://maven.apache.org/plugins/maven-failsafe-plugin/integration-test-mojo.html)我发现, <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

其他提示

这将是除了以前,如果有人满足问题与未与上述方案来解决斯堪字母。

如果Java源文件包含斯堪的信件,他们需要通过的的Java用于编译正确解释。 (用于常数例如斯堪字母)

即使该文件存储在UTF-8和Maven的被配置为使用UTF-8,系统Java使用的Maven会仍然使用系统默认(例如在Windows:CP1252)。

这将是可见仅在运行经由行家测试(可能印刷这些常数的值在测试中。印刷斯堪字母会显示为“<?>”) 如果没有适当的测试,这会破坏类文件作为编译结果和被留被忽视。

要防止这种情况,必须设置的爪哇用于编译以使用UTF-8编码。 这是不够的,必须在Maven的pom.xml编码设置,需要设置环境变量: JAVA_TOOL_OPTIONS = -Dfile.encoding = UTF8

此外,如果在Windows中使用Eclipse,则可能需要设置在除了用于此(如果运行通过蚀单个测试)的编码。

如果你把上面的答案,最后一个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>

尝试这种情况:

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

它似乎人混合内容的编码与建立文件/资源编码。只有家属性是不够的。具有 -Dfile.encoding=UTF8 没有有效的。为了避免有问题的编码你应该遵循以下简单的规则

  1. 设专家编码,如上所述:
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
  1. 总是明确的编码,在工作文件,符,IO在你的代码。如果你不遵循这项规则,您的申请取决于环境。的 -Dfile.encoding=UTF8 究竟是负责运行时的环境结构,但是,我们不应该依赖于它。如果你有成千上万的客户,这需要更多的努力,以配置系统和查找问题,因为它。你只有一个额外的依赖它,你是可以避免的通过设置它明确。大多数方法在Java,使用默认的编码标记为废弃,因为它。

  2. 确保内容,你的工作,还是在同样的编码,你期望。如果不是,前面的步骤并不重要!例如,一个文件,将不能正确处理,如果其编码不是UTF8但是你希望的。到检查的文件编码在Linux上

$文件--mime F_PRDAUFT.了

  1. 力客户/服务器上设置编码的明确请求/回应,这里有实例:
@Produces("application/json; charset=UTF-8")
@Consumes("application/json; charset=UTF-8")

希望这将有益于个人。

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

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

请参阅阿帕奇Maven的资源插件/指定字符编码方案

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top