Quando executo maven install
meu projeto multi-módulo maven, sempre obtenho a seguinte saída:
[WARNING] File encoding has not been set, using platform encoding UTF-8, i.e. build is platform dependent!
Então, pesquisei um pouco, mas tudo o que posso encontrar é que tenho que adicionar:
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
... ao meu pom.xml. Mas já está lá (nos pais pom.xml
).
A configuração <encoding>
do maven-resources-plugin ou do maven-compiler-plugin também não o corrige.
Então qual é o problema?
Respostas:
OK, encontrei o problema.
Eu uso alguns plugins de relatórios. Na documentação do failafe-maven-plugin ( http://maven.apache.org/plugins/maven-failsafe-plugin/integration-test-mojo.html ), achei que a
<encoding>
configuração - é claro - usa${project.reporting.outputEncoding}
por padrão . Então eu adicionei a propriedade como um elemento filho doproject
elemento e está tudo bem agora:Veja também http://maven.apache.org/general.html#encoding-warning
fonte
Isso seria um acréscimo ao anterior, se alguém encontrar um problema com letras escandinavas que não foi resolvido com a solução acima.
Se os arquivos de origem java contiverem letras escandinavas, eles precisam ser interpretados corretamente pelo Java usado para compilar . (por exemplo, letras escandinavas usadas em constantes)
Mesmo que os arquivos estejam armazenados em UTF-8 e o Maven esteja configurado para usar UTF-8, o Java do sistema usado pelo Maven ainda usará o padrão do sistema (por exemplo, no Windows: cp1252).
Isso estará visível apenas na execução dos testes via maven (possivelmente imprimindo os valores dessas constantes nos testes. As letras escandinavas impressas seriam mostradas como '<?>'). deixado despercebido.
Para evitar isso, você deve 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, é necessário definir a variável de ambiente: JAVA_TOOL_OPTIONS = -Dfile.encoding = UTF8
Além disso, se você estiver usando o Eclipse no Windows, poderá ser necessário definir a codificação usada além disso (se você executar um teste individual via eclipse).
fonte
-Dfile.encoding
se usar E / S em Java sem especificar explicitamente uma codificação (o que não é recomendado). Não vejo o que isso tem a ver com letras escândegas nos arquivos de origem Java. Os arquivos de origem não ASCII em Java funcionam com o Maven quandoproject.build.sourceEncoding
são definidos corretamente, conforme descrito na resposta de Ethan Leroy.javac
, ele passa a codificação definida porproject.build.sourceEncoding
(você pode verificar usandomvn -X
), então não vejo como o que você descreve é necessário. Se você ainda tiver problemas de codificação em seu projeto, considere fazer isso como uma pergunta separada - parece que você está enfrentando um problema diferente. Idealmente, publique um caso de teste reproduzível.Se você combinar as respostas acima, finalmente um pom.xml configurado para UTF-8 deve parecer com isso.
pom.xml
fonte
Parece que as pessoas misturam uma codificação de conteúdo com uma codificação de arquivos / recursos incorporada. Ter apenas propriedades maven não é suficiente. Tendo
-Dfile.encoding=UTF8
não é eficaz. Para evitar problemas com a codificação, siga as seguintes regras simplesSempre defina a codificação explicitamente, quando trabalhar com arquivos, strings, IO no seu código. Se você não seguir esta regra, seu aplicativo dependerá do ambiente. O
-Dfile.encoding=UTF8
exatamente é responsável pela configuração do ambiente de tempo de execução, mas não devemos depender disso. Se você possui 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 ser evitada configurando-a explicitamente. A maioria dos métodos em Java que usam uma codificação padrão são marcados como obsoletos por causa disso.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ê o espera. Para verificar a codificação de arquivo no Linux:
Espero que isso seja útil para alguém.
fonte
Tente o seguinte:
fonte
No meu caso, eu estava usando o
maven-dependency-plugin
modo para resolver o problema, tive que adicionar a seguinte propriedade:Consulte o Apache Maven Resources Plugin / Especificando um esquema de codificação de caracteres
fonte