如果构建器发现文件未使用 UTF-8 编码,是否可以使用 Maven 插件来使构建失败?
是的,有https://github.com/mikedon/encoding-enforcer
它使用 Maven Enforcer Plugin 和 juniversalchardet 进行编码检测。
2016 年 10 月 20 日更新: org.codehaus.mojo 有一个 extra-enforcer-rules 插件,它引入了 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>
采用 Maven 是一个不错的选择 - 毫无疑问,您很快就会完全皈依! :)
您可能想查看 Maven 执行器插件。首先,您可以使用
requireProperty
规则来确保 project.build.sourceEncoding
属性设置为 UTF-8。
至于检查实际文件本身(即检查某人是否提交了非 unicode 文件),您可以为执行器插件实现自己的自定义规则。执行此规则时,您需要读取项目中的所有资源并找到某种方法来检测每个资源的编码(例如 iconv)。
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>