简单的事情:如果选择的文件(.java
,.xml
)编码不正确(我想在源文件中强制执行UTF-8
),我希望能够通过checkstyle破解构建。如何使用checkstyle-plugin在源文件中验证使用的编码?
我目前对一些其他构建破坏者使用checkstyle,如强制执行正确的LineFeeds和/或使用制表符,但似乎没有像FileEncodingChecker
这样的东西。
问题:如果checkstyle根本无法做到这一点:是否有另一个插件可以做这个工作?
简单的事情:如果选择的文件(.java
,.xml
)编码不正确(我想在源文件中强制执行UTF-8
),我希望能够通过checkstyle破解构建。如何使用checkstyle-plugin在源文件中验证使用的编码?
我目前对一些其他构建破坏者使用checkstyle,如强制执行正确的LineFeeds和/或使用制表符,但似乎没有像FileEncodingChecker
这样的东西。
问题:如果checkstyle根本无法做到这一点:是否有另一个插件可以做这个工作?
Maven编码(来源和资源)由标准project.build.sourceEncoding
属性处理,该属性确实应该存在并设置为UTF-8
值,这是一种良好的做法。
从maven-resources-plugin
最佳实践的官方文件是定义编码用于经由这应该在POM属性部分
该属性被拾取作为被定义的属性${project.build.sourceEncoding}
复制过滤资源maven-resources-plugin
的maven-compiler-plugin
的encoding
财产的默认值和encoding
财产。
为了进一步加强它的存在,然后你可以使用maven-enforcer-plugin
及其requireProperty
规则,以执行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
属性来完成。
对堆栈溢出进一步阅读:
加成:因为我们对堆栈溢出,首席执行官可能会很高兴再次见到他的老文章:The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets
测试
考虑下面的Java代码:
package com.sample;
public class Main {
public void 漢字() {
}
}
和在Maven中设置以下内容:
<properties>
<project.build.sourceEncoding>US-ASCII</project.build.sourceEncoding>
</properties>
实际使得构建失败,因为US-ASCII
是7位,并且导致非法字符错误。 UTF-8
也不会发生这种情况,而是使用8位来代替。
@ a-di-matteo:感谢这个广泛的答案,对我来说非常合适。对于使用两个插件来实现一些(恕我直言)简单的构建破坏场景,我仍然感到有点不高兴。 – Rob