当我在我的多模块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-plugin 或 maven-compiler-plugin 配置<encoding>
也不能修复它。
那有什么问题
7条答案
按热度按时间ygya80vv1#
好的,我找到问题了。
我使用一些报告插件。在
failsafe-maven-plugin
的文档中,我发现<encoding>
配置-当然-默认使用${project.reporting.outputEncoding}
。因此,我将属性添加为
project
元素的子元素,现在一切都很好:jv4diomz2#
如果有人遇到斯堪的纳维亚字母的问题,而这个问题不能用前面的答案解决,这将是对前面的答案的补充。
如果Java源文件包含斯堪的纳维亚字母,则需要由用于编译的Java正确解释它们(例如,常量中使用的斯堪的纳维亚字母)。
即使文件以UTF-8格式存储,并且Maven配置为使用UTF-8,Maven使用的 system Java仍将使用系统默认值(例如,在Windows中:Windows-1252)。
只有通过Maven运行测试时才能看到这一点(可能会在测试中打印这些常量的值)。印刷的斯堪的纳维亚字母将显示为“<?如果没有正确测试,这将破坏作为编译结果的类文件,并被忽略。
为了防止这种情况,您必须将用于编译的Java设置为使用UTF-8编码。在Maven pom.xml 文件中有编码设置是不够的;你需要设置环境变量:
此外,如果在Windows中使用Eclipse,您可能需要设置除此之外使用的编码(如果您通过Eclipse运行单独的测试)。
qlckcl4x3#
如果你合并前面的答案,这里最后是一个 pom.xml,配置为UTF-8,应该是这样的。
pom.xml
7tofc5zh4#
人们似乎将内容编码与构建的文件/资源编码混合在一起。只有Maven属性是不够的。
-Dfile.encoding=UTF8
是无效的。为了避免编码问题,您应该遵循以下简单规则:1.设置Maven编码,如上所述:
1.在代码中处理文件、字符串和I/O时,始终显式设置编码。如果不遵循此规则,则应用程序将依赖于环境。
-Dfile.encoding=UTF8
确实负责运行时环境配置,但我们不应该依赖它。如果您有数千个客户端,则需要花费更多的精力来配置系统并查找问题。你只需要对它有一个额外的依赖,你可以通过显式地设置它来避免。Java中使用默认编码的大多数方法都因此被标记为已弃用。1.确保您正在处理的内容也采用了与您预期相同的编码。如果不是,那么前面的步骤就不重要了!例如,如果一个文件的编码不是UTF-8,但你期望它,它将不会被正确处理。要在Linux上检查文件编码,请执行以下操作:
1.强制客户端/服务器在请求/响应中显式设置编码。以下是一些例子:
vq8itlhq5#
试试这个:
umuewwlo6#
在我的例子中,我使用的是
maven-dependency-plugin
,所以为了解决这个问题,我必须添加以下属性:参见Apache Maven Resources Plugin / Specifying a character encoding scheme
x3naxklr7#
(As 2023年,但实际上一直如此)
如果你使用Sping Boot ,你不需要做任何事情。
它已经在父级中应用了这些属性。
而在一般情况下,上面这两行就足够了。
你不应该在任何其他地方或插件添加东西,除非你知道你在做什么。
如果你看到建议做更多,很可能是过时的东西。