Lorsque maven install
j'exécute mon projet maven multi-modules, 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 fait une petite recherche sur Google, mais tout ce que je peux trouver, c'est que je dois ajouter:
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
... à mon pom.xml. Mais c'est déjà là (chez le parent pom.xml
).
La configuration <encoding>
du maven-resources-plugin ou du maven-compiler-plugin ne le résout pas non plus.
Donc quel est le problème?
Réponses:
OK, j'ai trouvé le problème.
J'utilise des plugins de reporting. Dans la documentation du module de sécurité-maven-plugin ( http://maven.apache.org/plugins/maven-failsafe-plugin/integration-test-mojo.html ), j'ai trouvé que la
<encoding>
configuration - 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'project
élément et tout va bien maintenant:Voir également http://maven.apache.org/general.html#encoding-warning
la source
Ce serait en plus du précédent, si quelqu'un rencontre un problème avec les lettres de scandale qui n'est pas résolu avec la solution ci-dessus.
Si les fichiers source java contiennent des lettres de scandale, ils doivent être interprétés correctement par le Java utilisé pour la compilation . (par exemple, lettres de scandale utilisées dans les constantes)
Même si les fichiers sont stockés dans UTF-8 et que le Maven est configuré pour utiliser UTF-8, le système Java utilisé par le Maven utilisera toujours la valeur par défaut du système (par exemple, sous Windows: cp1252).
Cela ne sera visible qu'en exécutant les tests via maven (éventuellement en imprimant les valeurs de ces constantes dans les tests. Les lettres de scandale imprimées s'afficheraient comme '<?>'). 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 d'encodage dans le maven pom.xml, vous devez définir la variable d'environnement: JAVA_TOOL_OPTIONS = -Dfile.encoding = UTF8
De plus, si vous utilisez Eclipse dans Windows, vous devrez peut-être définir le codage utilisé en plus de cela (si vous exécutez un test individuel via eclipse).
la source
-Dfile.encoding
si vous utilisez les 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 de scandale dans les fichiers source Java. Les fichiers source non ASCII dans Java fonctionnent avec Maven lorsqu'ilproject.build.sourceEncoding
est correctement défini, comme décrit dans la réponse d'Ethan Leroy.javac
, il transmet l'encodage défini parproject.build.sourceEncoding
(vous pouvez vérifier en utilisantmvn -X
), donc je ne vois pas en quoi ce que vous décrivez est nécessaire. Si vous rencontrez toujours des problèmes d'encodage dans votre projet, envisagez de poser cette question séparément - il semble que vous rencontriez un problème différent. Idéalement, postez un cas de test reproductible.Si vous combinez les réponses ci-dessus, enfin un pom.xml configuré pour UTF-8 devrait ressembler à cela.
pom.xml
la source
Il semble que les gens mélangent un encodage de contenu avec un encodage de fichiers / ressources intégré. Avoir uniquement des propriétés maven ne suffit pas. N'ayant
-Dfile.encoding=UTF8
pas été efficace. Pour éviter d'avoir des problèmes avec l'encodage, vous devez suivre les règles simples suivantesDéfinissez toujours l'encodage de manière explicite, lorsque vous travaillez avec des fichiers, des chaînes, des E / S dans votre code. Si vous ne respectez pas cette règle, votre application dépend de l'environnement. Le
-Dfile.encoding=UTF8
est exactement responsable de la configuration de l'environnement d'exécution, mais nous ne devons pas en dépendre. Si vous avez des milliers de clients, il faut plus d'efforts pour configurer les systèmes et trouver les problèmes à cause de cela. Vous avez juste une dépendance supplémentaire à ce sujet que vous pouvez éviter en la définissant explicitement. La plupart des méthodes en Java qui utilisent un encodage par défaut sont marquées comme obsolètes à cause de cela.Assurez-vous que le contenu avec lequel vous travaillez est également dans le même encodage que vous attendez. Si ce n'est pas le cas, les étapes précédentes n'ont pas d'importance! Par exemple, un fichier ne sera pas traité correctement, si son encodage n'est pas UTF8 mais que vous vous y attendez. Pour vérifier l'encodage des fichiers sous Linux:
J'espère que cela sera utile à quelqu'un.
la source
Essaye ça:
la source
Dans mon cas, j'utilisais le
maven-dependency-plugin
afin de résoudre le problème, j'ai dû ajouter la propriété suivante:Voir Plugin de ressources Apache Maven / Spécification d'un schéma de codage de caractères
la source