Comment configurer l'encodage dans Maven?
Lorsque je lance maven install
sur mon projet Maven multi module, j'obtiens toujours la sortie suivante:
[WARNING] File encoding has not been set, using platform encoding UTF-8, i.e. build is platform dependent!
Donc, j'ai 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 pompon.XML. Mais c'est déjà là (dans le parent pom.xml
).
Configurer <encoding>
pour le plugin Maven-resources-ou le plugin Maven-compiler-ne le corrige pas non plus.
Alors quel est le problème?
5 réponses
OK, j'ai trouvé le problème.
J'utilise des plugins de reporting. Dans la documentation du plugin failsafe-maven (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. J'ai donc ajouté la propriété en tant qu'é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
Ce serait en plus de précédent, si quelqu'un rencontre un problème avec les lettres scandic qui n'est pas résolu avec la solution ci-dessus.
Si les fichiers source java contiennent des lettres scandic, ils doivent être interprétés correctement par le Java utilisé pour compiler . (par exemple, les lettres scandiques utilisées dans les constantes)
Même si les fichiers sont stockés en UTF-8 et que le Maven est configuré pour utiliser UTF-8, le système Java utilisé par le Maven utilisera toujours le système par défaut (par exemple. dans Windows: cp1252).
Cela sera visible uniquement en exécutant les tests via maven (éventuellement en imprimant les valeurs de ces constantes dans les tests. Les lettres scandic imprimées montreraient comme">') S'il n'est pas testé correctement, cela corromprait les fichiers de classe en tant que résultat de compilation et serait laissé inaperçu.
Pour éviter cela, vous devez définir le Java utilisé pour la compilation pour utiliser l'encodage UTF-8. Il ne suffit pas d'avoir les paramètres d'encodage dans le pom maven.xml, vous devez définir l'environnement variable: JAVA_TOOL_OPTIONS = - Dfile.encodage = UTF8
En outre, si vous utilisez Eclipse dans Windows, vous devrez peut-être définir l'encodage utilisé en plus de cela (si vous exécutez un test individuel via eclipse).
Si vous combinez les réponses ci-dessus, enfin un pom.xml configuré pour UTF-8 devrait ressembler à ç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>
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>
Dans mon cas, j'utilisais le maven-dependency-plugin
donc, afin de résoudre le problème, j'ai dû ajouter la propriété suivante:
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
Voir Plugin Apache Maven Resources / Spécification d'un schéma de codage de caractères