¿Cómo puedo configurar la codificación en Maven?
Cuando ejecuto maven install
mi proyecto Maven de múltiples módulos siempre obtengo el siguiente resultado:
[WARNING] File encoding has not been set, using platform encoding UTF-8, i.e. build is platform dependent!
Entonces busqué en Google un poco, pero todo lo que pude encontrar fue que tengo que agregar:
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
...a mi archivo pom.xml . Pero ya está allí (en el pom.xml principal ).
La configuración <encoding>
para maven-resources-plugin o maven-compiler-plugin tampoco lo soluciona.
¿Entonces, cuál es el problema?
Bien, he encontrado el problema.
Utilizo algunos complementos de informes. En la documentación failsafe-maven-plugin
encontré que la <encoding>
configuración, por supuesto, se usa ${project.reporting.outputEncoding}
de forma predeterminada.
Así que agregué la propiedad como elemento secundario del project
elemento y ahora todo está bien:
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
</properties>
Consulte también ¿Cómo puedo evitar "[ADVERTENCIA] Usar codificación de plataforma (CP-1252 en realidad) para copiar recursos filtrados, es decir, la compilación depende de la plataforma?" .
Si combina las respuestas anteriores, finalmente hay un pom.xml , que configurado para UTF-8, debería verse así.
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>YOUR_COMPANY</groupId>
<artifactId>YOUR_APP</artifactId>
<version>1.0.0-SNAPSHOT</version>
<properties>
<project.java.version>1.8</project.java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
</properties>
<dependencies>
<!-- Your dependencies -->
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<configuration>
<source>${project.java.version}</source>
<target>${project.java.version}</target>
<encoding>${project.build.sourceEncoding}</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
<configuration>
<encoding>${project.build.sourceEncoding}</encoding>
</configuration>
</plugin>
</plugins>
</build>
</project>
Parece que la gente mezcla una codificación de contenido con una codificación de archivos/recursos integrados. Tener sólo propiedades de Maven no es suficiente. Tener -Dfile.encoding=UTF8
no es efectivo. Para evitar tener problemas con la codificación, debes seguir las siguientes reglas simples:
Configure la codificación Maven, como se describe arriba:
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
Configure siempre la codificación explícitamente cuando trabaje con archivos, cadenas y E/S en su código. Si no sigue esta regla, su aplicación dependerá del entorno. Es
-Dfile.encoding=UTF8
exactamente responsable de la configuración del entorno de ejecución, pero no debemos depender de él. Si tiene miles de clientes, se necesita más esfuerzo para configurar los sistemas y encontrar problemas debido a ellos. Simplemente tiene una dependencia adicional que puede evitar configurándola explícitamente. La mayoría de los métodos en Java que utilizan una codificación predeterminada están marcados como obsoletos por esta razón.Asegúrese de que el contenido con el que está trabajando también esté en 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 UTF-8, pero usted lo espera. Para verificar la codificación de archivos en Linux:
file --mime F_PRDAUFT.dsv
Forzar la codificación del conjunto de clientes/servidor explícitamente en solicitudes/respuestas. Aquí hay ejemplos:
@Produces("application/json; charset=UTF-8") @Consumes("application/json; charset=UTF-8")
Prueba esto:
<project>
...
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.7</version>
<configuration>
...
<encoding>UTF-8</encoding>
...
</configuration>
</plugin>
</plugins>
...
</build>
...
</project>