2010-06-10 5 views
277

Quand je lance maven install sur mon projet Maven multimodule je reçois toujours la sortie suivante:Comment configurer l'encodage dans Maven?

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

Alors, je googlé un peu, mais tout ce que je peux trouver est que je dois ajouter:

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

... à mon pom.xml. Mais c'est déjà là (dans le parent pom.xml).

La configuration de <encoding> pour le plugin maven-resources-plugin ou maven-compiler-plugin ne le résout pas non plus.

Alors, quel est le problème?

+1

Soyez prudent que UTF-8 l'encodage est ce que vous voulez vraiment spécifier comme encodage. Vous feriez mieux d'utiliser un encodage plus simple tel que ISO-8859-1 (alias Latin-1) ou même US-ASCII. – rmp

+21

"Il vaudrait peut-être mieux utiliser un encodage plus simple comme ..." ouais, et les utilisateurs finaux de bogues, ainsi que d'autres développeurs ... De nos jours, il vaut mieux essayer d'utiliser UTF-8 autant que possible et ne vous souciez des autres encodages que lorsqu'une exigence d'application multi-encodage vous est proposée. Ici, nous parlons surtout de l'encodage des fichiers source et de configuration, l'encodage de l'entrée utilisateur est géré différemment (avec 'java -Dfile.encoding ...' et avec beaucoup d'effort de programmation douloureux). – zakmck

+0

Personnellement, j'ai décidé que les problèmes d'encodage étaient si insaisissables que je suis allé pour l'encodage ASCII dans pom.xml et ensuite pris les problèmes de codage à l'avant. Ceci est naturellement motivé par un caractère non-ASCII dans mon nom donnant des problèmes à partir du jour 1 :) –

Répondre

435

OK, j'ai trouvé le problème.

J'utilise des plugins de reporting. Dans la documentation du failsafe-maven-plugin (http://maven.apache.org/plugins/maven-failsafe-plugin/integration-test-mojo.html) j'ai trouvé, que la configuration <encoding> - bien sûr - utilise ${project.reporting.outputEncoding} par défaut. Donc, j'ai ajouté la propriété comme un élément enfant de l'élément project et tout va bien maintenant:

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

Voir aussi http://maven.apache.org/general.html#encoding-warning

+0

donc j'ai eu ce problème et j'ajouté les propriétés d'en haut comme celui-ci: \t \t \t \t \t \t \t \t \t true \t \t \t \t \t \t locale \t \t \t \t \t \t \t https://earneventapi.intra1.e1.v2.epaas.aexp.com \t \t \t \t UTF-8 \t \t \t \t UTF-8 \t \t \t \t \t

32

Ce serait en plus précédente, si quelqu'un rencontre un problème avec les lettres scandic cela n'est pas résolu avec la solution ci-dessus.

Si les fichiers source java contiennent des lettres scandales, ils doivent être interprétés correctement par le Java utilisé pour la compilation. (Par exemple lettres scandic utilisées dans les constantes)

Même que les fichiers sont stockés au format UTF-8 et le Maven est configuré pour utiliser UTF-8, le Java System utilisé par le Maven utilisera toujours la valeur par défaut du système (par exemple. En Windows: cp1252).

Ce ne sera visible que l'exécution des tests par Maven (impression peut-être les valeurs de ces constantes dans les tests. Les lettres scandic imprimées montreraient que « <?> ») Si pas testé correctement, cela pourrait corrompre les fichiers de classe comme résultat de compilation et être laissé inaperçu.

Pour éviter cela, vous devez définir le Java utilisé pour la compilation pour utiliser le codage UTF-8. Il ne suffit pas d'avoir les paramètres de codage dans le pom.xml Maven, vous devez définir la variable d'environnement: JAVA_TOOL_OPTIONS = -Dfile.encoding = UTF8

En outre, si vous utilisez Eclipse sous Windows, vous devrez peut-être définissez l'encodage utilisé en plus (si vous exécutez un test individuel via eclipse).

+2

Mille levées pour vous, bien qu'un moyen maven-pom de corriger cela obtiendrait des millions – Whimusical

+0

Vous ne savez pas s'il y a une façon de faire maven, puisqu'il s'agit d'un paramètre JVM, pas Maven. –

+3

Je pense que vous mélangez les choses. Vous n'avez besoin de définir '-Dfile.encoding' que si vous utilisez E/S en Java sans spécifier explicitement un encodage (ce qui n'est pas recommandé). Je ne vois pas ce que cela a à voir avec les lettres scandales dans les fichiers sources Java. Les fichiers sources non-ASCII dans Java fonctionnent avec Maven lorsque 'project.build.sourceEncoding' est correctement défini, comme décrit dans la réponse d'Ethan Leroy. – sleske

4

Essayez ceci:

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

Particulièrement important, nous ne devons pas oublier que non seulement les sources, mais aussi les ressources ont besoin de ce paramètre d'encodage. – peterh

16

Si vous combinez les réponses ci-dessus, enfin un pom.xml qui configuré pour UTF-8 devrait sembler comme ça.

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

Enfin grand modèle de pom –

Questions connexes