如何在Maven中配置编码?
题
当我跑步时 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>
其他提示
这将是除了以前,如果有人满足问题与未与上述方案来解决斯堪字母。
如果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
没有有效的。为了避免有问题的编码你应该遵循以下简单的规则
- 设专家编码,如上所述:
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
总是明确的编码,在工作文件,符,IO在你的代码。如果你不遵循这项规则,您的申请取决于环境。的
-Dfile.encoding=UTF8
究竟是负责运行时的环境结构,但是,我们不应该依赖于它。如果你有成千上万的客户,这需要更多的努力,以配置系统和查找问题,因为它。你只有一个额外的依赖它,你是可以避免的通过设置它明确。大多数方法在Java,使用默认的编码标记为废弃,因为它。确保内容,你的工作,还是在同样的编码,你期望。如果不是,前面的步骤并不重要!例如,一个文件,将不能正确处理,如果其编码不是UTF8但是你希望的。到检查的文件编码在Linux上
$文件--mime F_PRDAUFT.了
- 力客户/服务器上设置编码的明确请求/回应,这里有实例:
@Produces("application/json; charset=UTF-8") @Consumes("application/json; charset=UTF-8")
希望这将有益于个人。
在我来说,我用的是maven-dependency-plugin
所以为了解决这个问题,我不得不添加以下属性:
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>