2013-10-07 13 views
7

Bu nadir yeterince sorun, ama ne zaman bu yapı başarısız olmasına yönelik gerçekten istiyorum:Kaynak kodunda UTF8 olmayan bir karakter olduğunda Gradle'ın yapıyı kesmesini nasıl sağlayabilirsiniz?


/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 veya bu neden olacaktır -source 1.6 veya -source 1.7 kullanarak komut satırında javac, koşu ile başarısız. Gradle kullanarak, error: (sourceCompatibility 6 veya daha yüksek olarak ayarlanmışsa) olarak yazdırılır, ancak yapı hala başarılı olur.

Ben compileJava görev için javac komuta içine -source argüman almanın çeşitli yolları denedim, ama denedim hiçbir şey bir başarısızlık olarak bildirmek Gradle elde edebilmek görünüyor.

Başkası buna karıştı mı?

DÜZENLEME: Bazı ek ayrıntılar:

Bir dosya winansi kodlanmış varsa: 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."); 
    } 
} 

sonra bu hiçbir hata veya uyarı bu build.gradle, Gradle 1.3 ve Java 1.7 kullanarak geçer :


apply plugin: 'java' 

tasks.withType(Compile) { 
    options.encoding = "iso-8859-1" 
} 

Çıktı geçerli:

Ben options.encoding kaldırabilir veya UTF-8 olarak ayarlarsanız

[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 

, ben olsun bu: sourceTypeCompatibility1.6, 1.5 arasında ve 1.7 Ayar


[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 

çok yapmak gibi görünmüyor. , javac üzerinde -source kullanırken, warning: numaralı hatayı döndürür. Gradle ile, hala bir error:, ancak ilginç bir şekilde, bir sonraki derlemede yeniden derlenmiyor, oysa 1.6 ve 1.7 ile. ,


    options.compilerArgs < '-source 1.7' 

Kurar

:

Ben Gradle inşa edildiğinde javactır içine -source geçmek denemek için yollar her türlü denedim, ama bunların hiçbiri çalışmıyor gibi görünüyor:

inşa etmez ancak (bayrağı olmadan aynı) dışarı hata değildir:


    options.compilerArgs << '-source' 
    options.compilerArgs << '1.7' 

Bütün bunlar Gradle aslındakullanmıyor gerçeği ile ilgili bir şey var gibi görünüyor Derlemek için 10 adet yürütülebilir - içinde çok fazla çapraşık kod bulunan bir çeşit JVM derleme API'sini kullanıyor.Ben Gradle yapıyor gibi görünüyor çoğaltabiliyorsanız çalışırsanız, ben şöyle benim sınıf derlemek için bir sınıf oluşturabilirsiniz: javax/tools/CompileTest.java

Sen bu mini projeyi kullanarak sorunu yeniden edebilirsiniz: https://github.com/Jun-Dai/gradle_utf8_compilation_issue

kimseyi mu Bu problemin bir yolunu biliyorsunuz, Gradle derleme çıktısını ayrıştırmaktan ve bu belirli hata mesajını temel alarak yapı hatalarını çözmekten kısa bir süre sonra?

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

Bir çözüm buldunuz mu? –

+0

Ne yazık ki değil. Periyodik olarak yapım çıktısına bakıyorum ve yukarıdaki uyarıyı görürsem el ile bunu düzeltiyorum. Sanırım bu sorun, aslında çok sayıda geliştiricinin bulunduğu büyük bir kod tabanı üzerinde bile uygulanabilir bir çözüm olduğu için nadirdir. –

+1

Sorunumu sadece android {compileOptions.encoding = "Cp1252" –

cevap

0

sizin buildscript içinde build.gradle arasında {} bölümü bu deneyin yapılamamak için:


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

Bunun başka sonuçlar aldığından emin değiliz, ancak bir adım atacağım.

+0

kullanarak çözdüm Evet, işe yaramadı. –

+0

Bu bloğu, build.gradle sayfanızın üst kısmındaki {} bloğundaki bloğun içine koymalısınız. Onu yaptınmı?? –

+0

Benim build.gradle'ımın üstünde bir 'buildscript {} 'bloğum yok, ama şimdi bir tane eklemeyi denediğimde, sonuç aynı. İşte benim örneğin build.gradle var: 'eklentisi uygulanır: 'java'' ' buildscript { tasks.withType (Derleme) { options.encoding = "UTF-8" } } ' –

1

Böyle görünüyor bunu sağlayacak: Artık yapabilirsiniz

buildscript { 
    repositories { 
    mavenCentral() 
    } 

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

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

apply plugin: 'java' 

GÜNCELLEME:

1
//ignoreFailures = true 

Bu satırın başarısız olmasını istiyorsanız yukarıdaki satırı ekleyin ve kaldırın; bu ifadeyi aşağıdaki bölümün altına yerleştirin, işe yarayıp yaramadığını öğrenin.

tasks.withType(Compile) { 
    options.debug = true 
    options.compilerArgs = ["-g"] 
    } 
İlgili konular