有没有一个Maven插件可以在构建过程中检测到非UTF-8编码的文件并使构建失败?
有没有一个Maven插件可以在构建过程中检测到非UTF-8编码的文件并使构建失败?
是的,有一个https://github.com/mikedon/encoding-enforcer
它使用Maven Enforcer Plugin和juniversalchardet进行编码检测。
2016-10-20更新: org.codehaus.mojo提供了一个额外的强制规则插件,引入了requireEncoding规则。它使用ICU4J进行编码检测。
用法如下:
<plugin>
<artifactId>maven-enforcer-plugin</artifactId>
<!-- find the latest version at http://maven.apache.org/plugins/maven-enforcer-plugin/ -->
<version>1.0</version>
<executions>
<execution>
<id>require-utf-8</id>
<goals>
<goal>enforce</goal>
</goals>
<configuration>
<rules>
<requireEncoding>
<encoding>UTF-8</encoding>
<includes>src/main/resources/**,src/test/resources/**</includes>
</requireEncoding>
</rules>
<fastFail>false</fastFail>
</configuration>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>org.codehaus.mojo</groupId>
<artifactId>extra-enforcer-rules</artifactId>
<!-- find the latest version at http://www.mojohaus.org/extra-enforcer-rules/ -->
<version>1.0-beta-6</version>
</dependency>
</dependencies>
</plugin>
requireProperty
规则来确保 project.build.sourceEncoding
属性设置为UTF-8。maven-enforcer-plugin
对我们来说很有效。
对于没有任何UTF-8特定字符或BOM的文件,我们需要使用acceptAsciiSubset,否则它会抱怨US-ASCII
编码。
此外,failFast标签需要放在requireEncoding
内,以列出所有失败的文件:
<plugin>
<artifactId>maven-enforcer-plugin</artifactId>
<version>3.4.1</version>
<executions>
<execution>
<id>require-utf-8</id>
<goals>
<goal>enforce</goal>
</goals>
<configuration>
<rules>
<requireEncoding>
<encoding>UTF-8</encoding>
<acceptAsciiSubset>true</acceptAsciiSubset>
<failFast>false</failFast>
</requireEncoding>
</rules>
</configuration>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>org.codehaus.mojo</groupId>
<artifactId>extra-enforcer-rules</artifactId>
<version>1.7.0</version>
</dependency>
</dependencies>
</plugin>