Pergunta

Quando eu corro maven install No meu projeto Multi Module Maven, sempre recebo a seguinte saída:

[WARNING] File encoding has not been set, using platform encoding UTF-8, i.e. build is platform dependent!

Então, eu pesquisei um pouco no Google, mas tudo o que posso encontrar é que tenho que acrescentar:

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

... para o meu pom.xml. Mas já está lá (no pai pom.xml).

Configurando <encoding> Para o Maven-RESOURCES-PLUGIN ou o Maven-Compiler-Plugin, também não o corrige.

Então qual é o problema?

Foi útil?

Solução

Ok, eu encontrei o problema.

Eu uso alguns plugins de relatórios. Na documentação do fracasso-plugina-plugina (http://maven.apache.org/plugins/Maven-Failsafe-plugin/integration-test-mojo.html) Descobri que o <encoding> Configuração - é claro - usa ${project.reporting.outputEncoding} por padrão. Então eu adicionei a propriedade como um elemento criança do project elemento e está tudo bem agora:

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
</properties>

Veja também http://maven.apache.org/general.html#encoding-warning

Outras dicas

Isso seria um acréscimo anterior, se alguém enfrentar um problema com cartas de escândica que não são resolvidas com a solução acima.

Se os arquivos de origem Java contêm letras escândicas, eles precisam ser interpretados corretamente pelo Java usado para compilar. (por exemplo, cartas de candidato usadas em constantes)

Mesmo que os arquivos sejam armazenados no UTF-8 e o Maven está configurado para usar o UTF-8, o sistema Java usado pelo Maven ainda usará o padrão do sistema (por exemplo, no Windows: CP1252).

Isso será visível apenas executando os testes via Maven (possivelmente imprimindo os valores dessas constantes nos testes. As cartas de escândica impressas mostrariam como '<?' ') Se não fossem testadas corretamente, isso corrompeu os arquivos de classe como resultado compilar e seria deixado despercebido.

Para evitar isso, você precisa definir o Java usado para compilar Para usar a codificação UTF-8. Não basta ter as configurações de codificação no maven pom.xml, você precisa definir a variável de ambiente: java_tool_options = -dfile.encoding = utf8

Além disso, se estiver usando o Eclipse no Windows, pode ser necessário definir a codificação usada, além disso (se você executar o teste individual via eclipse).

Se você combinar as respostas acima, finalmente um pom.xml que configurou para o UTF-8 deve parecer assim.

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>

Experimente isso:

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

Parece que as pessoas misturam um conteúdo que codifica com uma codificação de arquivos/recursos construídos. Ter apenas propriedades do Maven não é suficiente. Tendo -Dfile.encoding=UTF8 não efetivo. Para evitar ter problemas com a codificação, você deve seguir as seguintes regras simples

  1. Definir codificação maven, conforme descrito acima:
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
  1. Sempre defina a codificação explicitamente, quando trabalhe com arquivos, strings, IO no seu código. Se você não seguir esta regra, seu aplicativo depende do ambiente. o -Dfile.encoding=UTF8 Exatamente é responsável pela configuração do ambiente em tempo de execução, mas não devemos depender disso. Se você tem milhares de clientes, é preciso mais esforço para configurar sistemas e encontrar problemas por causa disso. Você apenas tem uma dependência adicional, que pode evitar defini -la explicitamente. A maioria dos métodos em Java que usam uma codificação padrão é marcada como depreciada por causa disso.

  2. Verifique se o conteúdo, com o qual você está trabalhando, também está na mesma codificação, que você espera. Caso contrário, as etapas anteriores não importam! Por exemplo, um arquivo não será processado corretamente, se sua codificação não for UTF8, mas você espera. Para verificar a codificação do arquivo no Linux:

$ FILE -MIME F_PRDAUFT.DSV

  1. Force clientes/servidores Conjunto de codificação explicitamente em solicitações/respostas, aqui estão exemplos:
@Produces("application/json; charset=UTF-8")
@Consumes("application/json; charset=UTF-8")

Espero que isso seja útil para alguém.

No meu caso, eu estava usando o maven-dependency-plugin Portanto, para resolver o problema, tive que adicionar a seguinte propriedade:

  <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

Ver Plug -in de recursos da Apache Maven / especificando um esquema de codificação de caracteres

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top