2016-06-13 52 views
3

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

我目前对一些其他构建破坏者使用checkstyle,如强制执行正确的LineFeeds和/或使用制表符,但似乎没有像FileEncodingChecker这样的东西。

问题:如果checkstyle根本无法做到这一点:是否有另一个插件可以做这个工作?

回答

2

Maven编码(来源和资源)由标准project.build.sourceEncoding属性处理,该属性确实应该存在并设置为UTF-8值,这是一种良好的做法。
maven-resources-plugin

最佳实践的官方文件是定义编码用于经由这应该在POM属性部分

该属性被拾取作为被定义的属性${project.build.sourceEncoding}复制过滤资源maven-resources-pluginmaven-compiler-pluginencoding财产的默认值和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位来代替。

+0

@ a-di-matteo:感谢这个广泛的答案,对我来说非常合适。对于使用两个插件来实现一些(恕我直言)简单的构建破坏场景,我仍然感到有点不高兴。 – Rob

相关问题