这是一个罕见的不够的问题,但我真的很喜欢它,当这种情况发生构建失败:当源代码中存在非UTF8字符时,如何让Gradle无法构建?
/Users/jundai/perforce/trunk/service/test/com/mycompany/PriceFormattingTests.java:93: error: unmappable character for encoding UTF-8
return new CurrencyModel("373959", new Price("10.20", "EUR"), "�10.20", new Price("12.10", "USD"), "$12.10");
使用Ant或使用-source 1.6
或-source 1.7
将导致此运行javac
在命令行,失败。使用Gradle,它将打印为error:
(如果sourceCompatibility
设置为6或更高),但构建仍然成功。
我试过各种方法将-source
参数转化为命令的compileJava
任务,但我试过的东西似乎无法让Gradle将其报告为失败。
有没有其他人遇到过这个问题?
编辑:一些更多的细节:
如果我有一个文件在winansi
编码:src/main/java/Test.java
:
public class Test {
public static void main(String[] args) {
System.out.println("Testing UTF-8 compilation: C’est drôle, tout à coup je ne sais pas quoi dire.");
}
}
那么这种通过使用此build.gradle
,摇篮1.3和Java 1.7中没有错误或警告:
apply plugin: 'java'
tasks.withType(Compile) {
options.encoding = "iso-8859-1"
}
输出是:
[1.9.3-p327] gradle$ gradle build
:compileJava
:processResources UP-TO-DATE
:classes
:jar
:assemble
:compileTestJava UP-TO-DATE
:processTestResources UP-TO-DATE
:testClasses UP-TO-DATE
:test
:check
:build
BUILD SUCCESSFUL
如果我删除了options.encoding
,或将其设置为UTF-8
,我得到这个:
[1.9.3-p327] gradle$ gradle build
:compileJava
/Users/jbateskobashigawa/play/gradle/src/main/java/Test.java:3: error: unmappable character for encoding UTF8
System.out.println("Testing UTF-8 compilation: C�est dr�le, tout � coup je ne sais pas quoi dire.");
^
/Users/jbateskobashigawa/play/gradle/src/main/java/Test.java:3: error: unmappable character for encoding UTF8
System.out.println("Testing UTF-8 compilation: C�est dr�le, tout � coup je ne sais pas quoi dire.");
^
/Users/jbateskobashigawa/play/gradle/src/main/java/Test.java:3: error: unmappable character for encoding UTF8
System.out.println("Testing UTF-8 compilation: C�est dr�le, tout � coup je ne sais pas quoi dire.");
^
:processResources UP-TO-DATE
... (more stuff)
BUILD SUCCESSFUL
设置1.7
的sourceTypeCompatibility
1.5
之间,1.6
,并且似乎并没有做太多。 1.5
,如果在javac
上使用-source
将错误转换为warning:
。使用Gradle,它仍然是error:
,但有趣的是,它不会在下一个版本中重新编译,而它会使用1.6
和1.7
。
我已经试过各种方法,试图通过-source
到javac中,当摇篮正在建设,但他们都不似乎工作:
不建:
options.compilerArgs < '-source 1.7'
构建,但不报错了(与没有该标志):
options.compilerArgs << '-source'
options.compilerArgs << '1.7'
所有这一切都似乎有事可做与摇篮未实际使用事实10可执行文件进行编译 - 它使用某种JVM编译API,其中包含许多非常复杂的代码。如果我尝试复制什么摇篮似乎在做,我可以创建一个类来编译我的课,看起来像这样:javax/tools/CompileTest.java
你可以使用这个小项目重现该问题:https://github.com/Jun-Dai/gradle_utf8_compilation_issue
有谁知道解决这个问题的方法,缺少解析Gradle构建输出和基于特定错误消息构建失败?
您是否找到了解决方案? –
可悲的是没有。定期查看构建输出,如果我看到上述警告,我会手动修复它。我认为这个问题非常罕见,即使在拥有大量开发人员的大型代码库中,这也是一个可行的解决方案。 –
我简单地使用android解决了我的问题{compileOptions.encoding =“Cp1252” –