¿Cómo puedo configurar la codificación en Maven?

Resuelto Ethan Leroy asked hace 14 años • 7 respuestas

Cuando ejecuto maven installmi 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?

Ethan Leroy avatar Jun 11 '10 02:06 Ethan Leroy
Aceptado

Bien, he encontrado el problema.

Utilizo algunos complementos de informes. En la documentación failsafe-maven-pluginencontré que la <encoding>configuración, por supuesto, se usa ${project.reporting.outputEncoding}de forma predeterminada.

Así que agregué la propiedad como elemento secundario del projectelemento 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?" .

Ethan Leroy avatar Jun 10 '2010 20:06 Ethan Leroy

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>
bhdrk avatar Jun 29 '2016 07:06 bhdrk

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=UTF8no es efectivo. Para evitar tener problemas con la codificación, debes seguir las siguientes reglas simples:

  1. 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>
    
  2. 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=UTF8exactamente 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.

  3. 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
    
  4. 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")
    
Alexandr avatar Feb 13 '2019 12:02 Alexandr

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>
fsimon avatar Apr 17 '2016 22:04 fsimon