gradle version: 3.0

昨天使用 Gradle 为测试环境打包时,使用测试环境的配置信息,替换系统配置文件后,发现配置文件中的中文注释,编程乱码了,导致发布到测试环境后,jetty 报 3 字节的 UTF-8 序列的字节 3 无效 的错误。这里简单介绍一下错误原因和解决方案。

问题背景

src/main/resources/log4j2.xml 部分内容:

...
  <Properties>
    <!-- 项目名称 -->
    <Property name="project.name">@project.name@</Property>
  </Properties>
...

build.gradle 部分内容:

processResources {
    // src/main/resources 下的文件中 @key@ 的内容使用 config.groovy 里对应的进行替换
    from(sourceSets.main.resources.srcDirs) {
        filter(ReplaceTokens, tokens: configuration.toProperties())
    }
}

上面 processResources 方法会导致 log4j2.xml 中的中文注释乱码,最终导致启动报错。

解决方案

解决这个问题并不困难,直接在 processResources 方法添加一行 filteringCharset = 'UTF-8' 即可,最终的 processResource

processResources {
    // src/main/resources 下的文件中 @key@ 的内容使用 config.groovy 里对应的进行替换
    filteringCharset = 'UTF-8'
    from(sourceSets.main.resources.srcDirs) {
        filter(ReplaceTokens, tokens: configuration.toProperties())
    }
}
About Me
后端开发工程师
GitHub Repos