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.
L'impostazione della codifica predefinita della piattaforma su UTF-8 ha risolto il problema. Presumo che questo sia un bug in Maven. – roesslerj
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
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