简单的事情:如果选择的文件(.java
,.xml
)编码不正确,我希望能够通过checkstyle中断构建(我想在源文件中强制执行UTF-8
)。
我目前正在为许多其他构建断路器使用checkstyle,例如强制使用正确的LineFeeds和/或Tab字符的使用,但似乎没有像FileEncodingChecker
那样的东西。
问题:如果checkstyle根本无法做到这一点:还有其他插件可以完成这项工作吗?
答案 0 :(得分:3)
Maven编码(源和资源)由标准project.build.sourceEncoding
属性处理,确实应该存在并设置为UTF-8
值,这是一种很好的做法。
来自maven-resources-plugin
最佳做法是通过属性
${project.build.sourceEncoding}
定义用于复制已过滤资源的编码,该属性应在pom属性部分中定义
此属性被选为maven-compiler-plugin
的{{3}}属性和maven-resources-plugin
的{{3}}属性的默认值。
要进一步强制执行此功能,您可以使用encoding
及其encoding
规则,以强制project.build.sourceEncoding
属性及其值UTF-8
的存在}。也就是说,如果未设置属性并且没有具有此确切值,则构建将失败。
在此类配置的示例下,要添加到pom.xml
文件,build/plugins
部分:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-enforcer-plugin</artifactId>
<version>1.4.1</version>
<executions>
<execution>
<id>enforce-property</id>
<goals>
<goal>enforce</goal>
</goals>
<configuration>
<rules>
<requireProperty>
<property>project.build.sourceEncoding</property>
<message>Encoding must be set and at UTF-8!</message>
<regex>UTF-8</regex>
<regexMessage>Encoding must be set and at UTF-8</regexMessage>
</requireProperty>
</rules>
<fail>true</fail>
</configuration>
</execution>
</executions>
</plugin>
注意,project.reporting.outputEncoding
属性也可以这样做。
进一步阅读Stack Overflow:
Bonus :由于我们处于Stack Overflow,因此首席执行官可能会很高兴再次看到他的旧文章:Maven platform encoding
<强>测试强>
给出以下Java代码:
package com.sample;
public class Main {
public void 漢字() {
}
}
并在Maven中设置以下内容:
<properties>
<project.build.sourceEncoding>US-ASCII</project.build.sourceEncoding>
</properties>
实际上会使构建失败,因为US-ASCII
是7位并且woudl导致非法字符错误。 UTF-8
也不会发生这种情况,而是使用8位。