Cuando ejecuto maven install
mi proyecto maven de módulos múltiples, siempre obtengo el siguiente resultado:
[WARNING] File encoding has not been set, using platform encoding UTF-8, i.e. build is platform dependent!
Así que busqué en Google un poco, pero todo lo que puedo encontrar es que tengo que agregar:
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
... a mi pom.xml. Pero ya está allí (en el padre pom.xml
).
La configuración <encoding>
para el complemento de recursos maven o el complemento de compilación maven tampoco lo soluciona.
¿Entonces, cuál es el problema?
Respuestas:
OK, encontré el problema.
Yo uso algunos complementos de informes. En la documentación de failsafe-maven-plugin ( http://maven.apache.org/plugins/maven-failsafe-plugin/integration-test-mojo.html ) descubrí que la
<encoding>
configuración, por supuesto, se usa${project.reporting.outputEncoding}
por defecto . Así que agregué la propiedad como elemento secundario delproject
elemento y todo está bien ahora:Ver también http://maven.apache.org/general.html#encoding-warning
fuente
Esto sería adicional al anterior, si alguien encuentra un problema con las letras escandicas que no se resuelve con la solución anterior.
Si los archivos fuente de Java contienen letras escandicas, deben ser interpretados correctamente por el Java utilizado para la compilación . (ej. letras escandicas usadas en constantes)
Incluso si los archivos se almacenan en UTF-8 y el Maven está configurado para usar UTF-8, el Sistema Java utilizado por el Maven seguirá usando el sistema predeterminado (por ejemplo, en Windows: cp1252).
Esto será visible solo ejecutando las pruebas a través de Maven (posiblemente imprimiendo los valores de estas constantes en las pruebas. Las letras escandicas impresas se mostrarían como '<?>') Si no se prueba correctamente, esto dañaría los archivos de clase como resultado de la compilación y se Dejó desapercibido.
Para evitar esto, debe configurar el Java utilizado para la compilación para usar la codificación UTF-8. No es suficiente tener la configuración de codificación en el pom.xml de maven, debe establecer la variable de entorno: JAVA_TOOL_OPTIONS = -Dfile.encoding = UTF8
Además, si usa Eclipse en Windows, es posible que deba configurar la codificación utilizada además de esto (si ejecuta una prueba individual a través de eclipse).
fuente
-Dfile.encoding
si usa E / S en Java sin especificar explícitamente una codificación (que no se recomienda). No veo qué tiene que ver esto con las letras escandicas en los archivos fuente de Java. Los archivos fuente no ASCII en Java funcionan con Maven cuandoproject.build.sourceEncoding
se configura correctamente, como se describe en la respuesta de Ethan Leroy.javac
, pasará a lo largo de la codificación establecida porproject.build.sourceEncoding
(puede verificar usandomvn -X
), por lo que no veo cómo es necesario lo que describe. Si aún tiene problemas de codificación en su proyecto, considere hacer eso como una pregunta separada: parece que se encuentra con un problema diferente. Idealmente, publique un caso de prueba reproducible.Si combina las respuestas anteriores, finalmente un pom.xml configurado para UTF-8 debería verse así.
pom.xml
fuente
Parece que las personas mezclan una codificación de contenido con una codificación de archivos / recursos incorporados. Tener solo propiedades maven no es suficiente. Tener
-Dfile.encoding=UTF8
no efectivo. Para evitar tener problemas con la codificación, debe seguir las siguientes reglas simplesSiempre configure la codificación explícitamente, cuando trabaje con archivos, cadenas, IO en su código. Si no sigue esta regla, su aplicación dependerá del entorno. La
-Dfile.encoding=UTF8
exactitud es responsable de la configuración del entorno de tiempo de ejecución, pero no debemos depender de ello. Si tiene miles de clientes, se necesita más esfuerzo para configurar los sistemas y encontrar problemas debido a ello. Solo tiene una dependencia adicional que puede evitar estableciéndolo explícitamente. La mayoría de los métodos en Java que usan una codificación predeterminada están marcados como obsoletos debido a ello.Asegúrese de que el contenido con el que está trabajando también tenga la misma codificación que espera. Si no es así, ¡los pasos anteriores no importan! Por ejemplo, un archivo no se procesará correctamente, si su codificación no es UTF8 pero lo espera. Para verificar la codificación de archivos en Linux:
Espero que esto sea útil para alguien.
fuente
Prueba esto:
fuente
En mi caso, estaba usando el
maven-dependency-plugin
modo para resolver el problema, tuve que agregar la siguiente propiedad:Consulte Complemento de recursos de Apache Maven / Especificación de un esquema de codificación de caracteres
fuente