2013-10-07 6 views
7

それは珍しい十分に問題だが、これが起こるとき、それは、ビルドに失敗するために、私は本当にしたい:ソースコードに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.61.5sourceTypeCompatibilityを設定

[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の場合、-sourcejavacに設定すると、エラーはwarning:に変わります。 Gradleではまだerror:ですが、興味深いことに、次のビルドでは再コンパイルされませんが、1.61.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ビルドの出力を解析してその特定のエラーメッセージに基づいてビルドに失敗していますか?

+1

ソリューションを見つけましたか? –

+0

悲しいことではない。定期的に私はビルドの出力を見て、私は上記の警告が表示されたら、私は手動でそれを修正します。私はこの問題はまれだと思っています。それは実際には大量の開発者がいる大規模なコードベースでも実用的なソリューションです。 –

+1

私は単にアンドロイドを使用して私の問題を解決しました{compileOptions.encoding = "Cp1252" –

答えて

0

build.gradleのごbuildscript {}セクションでこれを試してみてください:

android { 
    compileOptions.encoding = "UTF-8" 
} 
+0

ええ、うまくいきませんでした。 –

+0

ブロックをbuild.gradleの一番上にあるbuildscript {}ブロックの中に置く必要があります。あなたはそれをやりました?? –

+0

build.gradleの上部に 'buildscript {}'ブロックがありませんが、今すぐ追加しようとしたときの結果は同じです。ここに私の例のためのbuild.gradleです: 'プラグインを適用する:「java'' ' buildscript { tasks.withType(コンパイル){ options.encodingは= "UTF-8" }} ' –

1

これはそれが可能になりますように思え:あなたは今、これを行うことができUPDATE

buildscript { 
    repositories { 
    mavenCentral() 
    } 

    tasks.withType(Compile) { 
    options.encoding = "UTF-8" 
    } 

    dependencies { 
    classpath 'com.android.tools.build:gradle:0.5.+' 
    } 
} 

apply plugin: 'java' 

ビルドに失敗する:


    options.fork = true 
    options.forkOptions.executable = 'javac' 

それには別の問題があるかどうかはわかりませんが、私はそれを解ります。

1
//ignoreFailures = true 

を挿入してコメントを解除し、あなたはそれが、失敗し、次のセクションの下にこの文を入れて、それが動作するかどうかを確認したい場合は、上記の行。

tasks.withType(Compile) { 
    options.debug = true 
    options.compilerArgs = ["-g"] 
    } 
関連する問題