2012-05-31 15 views
5

Ok, questo è un problema strano: Ho un file di test java che utilizza alcuni caratteri UTF-8. Quando compilo con Maven, utilizzandoMVN non utilizza la codifica UTF-8

mvn -Dfile.encoding=UTF-8 -Dproject.build.sourceEncoding=UTF-8 test 

(dando così sia la codifica piattaforma percepita e la codifica del file sorgente, vedere maven platform encoding) ottengo qualcosa come

[INFO] Scanning for projects... 
[INFO] ------------------------------------------------------------------------ 
[INFO] Building project 
[INFO] task-segment: [test] 
[INFO] ------------------------------------------------------------------------ 
[INFO] [resources:resources {execution: default-resources}] 
[INFO] Using 'UTF-8' encoding to copy filtered resources. 
[INFO] skip non existing resourceDirectory path/src/main/resources 
[INFO] [compiler:compile {execution: default-compile}] 
[INFO] Nothing to compile - all classes are up to date 
[INFO] [resources:testResources {execution: default-testResources}] 
[INFO] Using 'UTF-8' encoding to copy filtered resources. 
[INFO] skip non existing resourceDirectory path/src/test/resources 
[INFO] [compiler:testCompile {execution: default-testCompile}] 
[INFO] Compiling 7 source files to path/target/test-classes 
[INFO] ------------------------------------------------------------------------ 
[ERROR] BUILD FAILURE 
[INFO] ------------------------------------------------------------------------ 
[INFO] Compilation failure 
path/to/file.java:[42,23] unclosed character literal 
path/to/file.java:[42,25] ';' expected 
path/to/file.java:[42,26] unclosed character literal 
path/to/file.java:[47,23] unclosed character literal 
path/to/file.java:[47,25] illegal character: \182 
path/to/file.java:[47,26] unclosed character literal 

Quando compilo il file con

javac path/to/file.java 

ottengo errori simili:

path/to/file.java:42: unclosed character literal 
    illegalCharEnc('ä'); 
       ^
path/to/file.java:42: ';' expected 
    illegalCharEnc('ä'); 
        ^
path/to/file.java:42: unclosed character literal 
    illegalCharEnc('ä'); 
        ^
path/to/file.java:47: unclosed character literal 
    illegalCharDec('ö'); 
       ^
path/to/file.java:47: illegal character: \182 
    illegalCharDec('ö'); 
        ^
path/to/file.java:47: unclosed character literal 
    illegalCharDec('ö'); 
        ^
6 errors 

Ora, quando io uso

javac -encoding UTF-8 path/to/file.java 

invece, ottengo cannot find symbol errori, a causa delle dipendenze mancanti. Quindi immagino che il problema è che javac non viene chiamato con l'opzione UTF-8 in Maven durante la compilazione dei test (nota come Using 'UTF-8' encoding to copy filtered resources. manca nella sezione compiler:testCompile). Questa conclusione è corretta? Mi sto perdendo qualcosa? È un problema noto? Qualcosa che posso fare al riguardo? Ovviamente, la codifica della piattaforma sul mio sistema non è UTF-8, ma al momento non posso cambiarla.

+0

L'impostazione della codifica predefinita della piattaforma su UTF-8 ha risolto il problema. Presumo che questo sia un bug in Maven. – roesslerj

+0

Quale versione del plug-in del compilatore usi? Hai definito il project.build.SourceEnconding nel tuo pom (sembra che tu non l'abbia fatto) – khmarbaise

+0

La versione del plugin del compilatore non è specificata nel pom, Maven è la versione "2.2.1 (rdebian-4)". Ho provato a specificare la proprietà 'project.build.SourceEnconding' nel pom, non ho cambiato nulla. E questo dovrebbe essere lo stesso di dare comunque '-Dproject.build.sourceEncoding =' nella riga di comando. – roesslerj

risposta

6

Avendo avuto lo stesso problema, mi sono imbattuto prima in questa domanda. Ma a me perché non c'era nessuna risposta ho guardato oltre e ha trovato un'altra domanda che è stato risposto e ha contribuito a risolvere questo:

https://stackoverflow.com/a/10375505/332248 (credito per @chrisapotek e @Jopp Eggen per rispondere a questa)

5

Maven compilatore plug-in, prende la codifica come parametro di configurazione. Non solo UTF-8 ma è supportata un'ampia varietà di standard di codifica.,

<plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <configuration> 
       <source>1.6</source> 
       <target>1.6</target> 
       <encoding>UTF-8</encoding> 
      </configuration> 
     </plugin> 
Problemi correlati