それは珍しい十分に問題だが、これが起こるとき、それは、ビルドに失敗するために、私は本当にしたい:ソースコードに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以上に設定されている場合)として印刷されますが、ビルドはまだ成功しています。
タスクのjavac
コマンドには、さまざまな方法で-source
引数を取得しようとしましたが、これを失敗として報告するGradleを取得することはできません。
誰かがこれに遭遇しましたか?
EDIT:src/main/java/Test.java
::私はwinansi
でエンコードされたファイルがある場合は
:いくつかのより多くの詳細が
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.");
}
}
を、これはGradleの1.3、このbuild.gradle
を使用して、エラーや警告なしで渡し、および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.6
、
1.5
間
sourceTypeCompatibility
を設定
[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
は多くを行うように思えません。 1.5
の場合、-source
をjavac
に設定すると、エラーはwarning:
に変わります。 Gradleではまだerror:
ですが、興味深いことに、次のビルドでは再コンパイルされませんが、1.6
と1.7
となります。
私はGradleのが構築されたときのjavacに-source
を渡すためにしようとするあらゆる方法を試してみたが、それらのどれも動作するようには思えません:
はビルドされません:
options.compilerArgs < '-source 1.7'
ビルド、しかし、(フラグなしと同じ)を出て、エラーはありません:
options.compilerArgs << '-source'
options.compilerArgs << '1.7'
このすべては、Gradleのは、実際にを使用していないという事実とは何かを持っているようですコンパイルするために実行可能な10個のJVMコンパイルAPIを使用しています。このAPIには非常に複雑なコードがたくさんあります。私はGradleのががやっているように見えるものを複製しようとすると、私はこのようになります私のクラスをコンパイルしたクラスを作成することができます。javax/tools/CompileTest.java
あなたはこのミニプロジェクト使用して問題を再現することができます:https://github.com/Jun-Dai/gradle_utf8_compilation_issue
は誰もいをこの問題を回避する方法を知っています.Gradleビルドの出力を解析してその特定のエラーメッセージに基づいてビルドに失敗していますか?
ソリューションを見つけましたか? –
悲しいことではない。定期的に私はビルドの出力を見て、私は上記の警告が表示されたら、私は手動でそれを修正します。私はこの問題はまれだと思っています。それは実際には大量の開発者がいる大規模なコードベースでも実用的なソリューションです。 –
私は単にアンドロイドを使用して私の問題を解決しました{compileOptions.encoding = "Cp1252" –