这是一个非常罕见的问题,但我真的希望它在发生这种情况时能够使构建失败:
/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");
Run Code Online (Sandbox Code Playgroud)
使用Ant或javac在命令行上运行,使用-source 1.6或-source 1.7将导致此操作失败.使用Gradle,它打印为error:(如果sourceCompatibility设置为6或更高),但构建仍然成功.
我已经尝试了各种方法让-source参数进入任务的javac命令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.");
}
}
Run Code Online (Sandbox Code Playgroud)
然后使用它build.gradle,Gradle 1.3和Java 1.7 传递没有错误或警告:
apply plugin: 'java'
tasks.withType(Compile) {
options.encoding = "iso-8859-1"
}
Run Code Online (Sandbox Code Playgroud)
输出是:
[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
Run Code Online (Sandbox Code Playgroud)
如果我删除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
Run Code Online (Sandbox Code Playgroud)
设置sourceTypeCompatibility之间1.5,1.6并且1.7似乎没有做太多. 1.5,当使用-sourceon时javac将错误转换为a warning:.随着摇篮,它仍然是一个error:,但有趣的是它不会重新编译的未来建设,而与1.6和1.7它.
-source当Gradle构建时,我尝试了各种方法尝试传递给javac,但它们似乎都没有工作:
不构建:
options.compilerArgs < '-source 1.7'
Run Code Online (Sandbox Code Playgroud)
构建,但不会出错(与没有标志相同):
options.compilerArgs << '-source'
options.compilerArgs << '1.7'
Run Code Online (Sandbox Code Playgroud)
所有这些似乎与Gradle实际上并没有使用javac可执行文件进行编译这一事实有关- 它使用某种JVM编译API,其中包含许多非常复杂的代码.如果我尝试复制Gradle 似乎正在做的事情,我可以创建一个类来编译我的类,如下所示:javax/tools/CompileTest.java
您可以使用此迷你项目重现该问题:https://github.com/Jun-Dai/gradle_utf8_compilation_issue
有没有人知道解决这个问题的方法,除了解析Gradle构建输出和基于该特定错误消息的构建失败?
在 build.gradle 的buildscript { }部分尝试一下:
buildscript {
repositories {
mavenCentral()
}
tasks.withType(Compile) {
options.encoding = "UTF-8"
}
dependencies {
classpath 'com.android.tools.build:gradle:0.5.+'
}
}
apply plugin: 'java'
Run Code Online (Sandbox Code Playgroud)
更新 您现在可以执行以下操作:
android {
compileOptions.encoding = "UTF-8"
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7182 次 |
| 最近记录: |