如何使用checkstyle-plugin验证源文件中使用的编码?

时间:2016-06-13 13:16:32

标签: maven maven-3 checkstyle

简单的事情:如果选择的文件(.java.xml)编码不正确,我希望能够通过checkstyle中断构建(我想在源文件中强制执行UTF-8 )。

我目前正在为许多其他构建断路器使用checkstyle,例如强制使用正确的LineFeeds和/或Tab字符的使用,但似乎没有像FileEncodingChecker那样的东西。

问题:如果checkstyle根本无法做到这一点:还有其他插件可以完成这项工作吗?

1 个答案:

答案 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位。

相关问题