2012-05-31 13 views
5

Ok, esto es un problema raro: Tengo un archivo de prueba de Java que utiliza algunos caracteres UTF-8. Cuando compilo con Maven, utilizandoMVN compilar no usar codificación UTF-8

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

(estableciendo así tanto la codificación plataforma percibida y la codificación del archivo fuente, consulte maven platform encoding) me sale algo así como

[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 

cuando compilo el archivo con

javac path/to/file.java 

tengo errores similares:

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 

Ahora cuando uso

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

lugar, consigo cannot find symbol errores, debido a las dependencias que faltan. Por lo que figura el problema es que no se llama javac con UTF-8 opción de Maven al compilar pruebas (observe como Using 'UTF-8' encoding to copy filtered resources. no se encuentra en compiler:testCompile -section). ¿Es esta conclusión correcta? ¿Me estoy perdiendo de algo? ¿Es este un problema conocido? ¿Hay algo que pueda hacer al respecto? Obviamente, la codificación de la plataforma en mi sistema no es UTF-8, pero actualmente no puedo cambiar eso.

+0

Al establecer la codificación predeterminada de la plataforma en UTF-8, se solucionó el problema. Supongo que esto es un error en Maven. – roesslerj

+0

¿Qué versión del compilador-complemento usa? ¿Ha definido el project.build.SourceEnconding en su pom (parece que no lo hizo) – khmarbaise

+0

La versión del compilador-complemento no está especificada en el pom, Maven es la versión "2.2.1 (rdebian-4)". Traté de especificar la propiedad 'project.build.SourceEnconding' en el pom, no cambié nada. Y esto debería ser lo mismo que dar '-Dproject.build.sourceEncoding =' en la línea de comando de todos modos. – roesslerj

Respuesta

6

haber tenido el mismo problema me encontré con esta pregunta primero. Pero como yo no había respuesta Miré más allá y encontró otra pregunta que fue contestada y ayudó a resolver esto:

https://stackoverflow.com/a/10375505/332248 (crédito a @chrisapotek y @Jopp Eggen para responder a esta)

5

Maven plugin del compilador, toma de codificación como un parámetro de configuración. No solo es compatible con UTF-8, sino que es compatible con una amplia variedad de estándares de codificación.

<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>