web-dev-qa-db-fra.com

Erreur: caractère non mappable pour encoder UTF8 lors de la compilation maven

Je compile un paquet en utilisant maven et il dit un échec de construction avec l'erreur de compilation suivante:

SpanishTest.Java [31, 81] caractère non mappable pour encoder UTF8

J'ai cherché en ligne et pour beaucoup de gens, changer l'encodage source d'UTF-8 à ISO-8859-1 semble fonctionner, mais je reçois toujours la même erreur de compilation. J'utilise Ubuntu 32 bits. Voici à quoi ressemble cette balise dans mon pom.xml

<project.build.sourceEncoding>ISO-8859-1</project.build.sourceEncoding>

Même si je change l'étiquette <project.build.outputEncoding> en ISO-8859-1, j'obtiens toujours l'erreur. Est-ce que cela pourrait être à cause de la version de Java? Sun Java et openjdk sont tous deux installés sur mon système.

Quelqu'un peut-il s'il vous plaît laissez-moi savoir quoi faire.

Merci 

47
Yogesh

Configurez le plugin maven-compiler-plugin pour utiliser le même encodage de caractères que vos fichiers source (par exemple):

<plugin>
    <groupId>org.Apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>2.3.2</version>
    <configuration>
        <source>1.6</source>
        <target>1.6</target>
        <encoding>UTF-8</encoding>
    </configuration>
</plugin>

Beaucoup de plugins maven utiliseront par défaut la propriété "project.build.sourceEncoding", donc le paramétrer dans votre pom couvrira la plupart des plugins.

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

Cependant, je préfère définir l'encodage dans la configuration de chaque plugin qui le supporte, car j'aime être explicite.

Lorsque votre code source est compilé par le plug-in maven-compiler-vos fichiers de code source sont lus par le plug-in du compilateur en utilisant le codage avec lequel le plug-in de compilateur est configuré. Si vos fichiers source ont un codage différent de celui utilisé par le plug-in du compilateur, il est possible que certains caractères n'existent pas dans les deux codages.

De nombreuses personnes préfèrent définir le codage de leurs fichiers source sur UTF-8 afin d'éviter ce problème. Pour ce faire, dans Eclipse, vous pouvez cliquer avec le bouton droit de la souris sur un projet et sélectionner Propriétés-> Ressource-> Codage de fichier texte et le changer en UTF-8. Ceci encodera tous vos fichiers source en UTF-8. (Vous devez également explicitement configurer le plugin maven-compiler-plugin comme indiqué ci-dessus pour utiliser l'encodage UTF-8.) Avec vos fichiers source et le plug-in du compilateur utilisant le même encodage, vous ne devriez plus avoir de caractères non mappables pendant la compilation.

Remarque: vous pouvez également définir l'encodage de fichier globalement dans Eclipse via Fenêtre-> Préférences-> Général-> Espace de travail-> Encodage de fichier texte. Vous pouvez également définir le codage par type de fichier via Fenêtre-> Préférences-> Général-> Types de contenu.

63
BenjaminLinus

Si la réponse ci-dessus ne fonctionne pas, modifiez le codage en cp1252 ou supprimez manuellement toutes les occurrences du caractère spécial. Pour moi, un caractère spécial causait le problème qui se trouvait à l'intérieur d'un bloc de commentaires. 

<plugin>
   <groupId>org.Apache.maven.plugins</groupId>
   <artifactId>maven-compiler-plugin</artifactId>
   <version>2.3.2</version>
   <configuration>
       <encoding>Cp1252</encoding>
   </configuration> 
</plugin>

PS: J'utilisais le système d'exploitation GNU/Linux (Ubuntu). 

18
false9striker

Je suis tombé sur ce problème tout à l'heure et j'ai fini par le résoudre comme suit: j'ai ouvert le fichier .Java incriminé dans Notepad ++ et dans le menu Encodage, j'ai sélectionné "Convertir en UTF-8 sans BOM". Enregistré. Re-couru maven, tout s'est bien passé. 

Si la ressource incriminée n'était pas encodée en UTF-8 - comme vous l'avez configuré pour votre plugin compilateur maven - vous verriez dans le menu Encodage de Np ++ une puce située à côté du fichier current encoding (dans mon cas, j'ai vu il a été réglé sur "Encoder en ANSI").

Ainsi, votre plug-in de compilation maven a appelé le compilateur Java avec l'option -encoding définie sur UTF-8, mais le compilateur a rencontré un fichier source codé en ANSI et l'a signalé comme une erreur. Auparavant, il s’agissait d’un avertissement dans Java 5 mais est traité comme une erreur dans Java 6+.

10
Peter Perháč

Cela se produit dans le scénario suivant: Lorsque vous travaillez sous Windows, le IDE est plus que probablement configuré pour éditer des fichiers dans Cp1252, une adaptation Microsoft de latin-11. Le développeur s'enregistre et le serveur d'intégration continue (fonctionnant généralement sous Linux, qui est aujourd'hui entièrement utf8) récupère le fichier et tente de le compiler en tant que fichier UTF-8, d'où l'avertissement.

Essayez de changer le codage encp1252. Cela marche. Pour éviter de futurs problèmes de ce type, utilisez le même encodage sur toutes les machines de développement.

Bonne chance...

7
James

Dans mon cas, j'ai résolu ce problème en utilisant une telle approche: 

  1. Définir une nouvelle variable d'environnement: Java_TOOL_OPTIONS = -Dfile.encoding=UTF8
  2. Ou définissez MAVEN_OPTS= -Dfile.encoding=UTF-8
3
BSeitkazin

Quand j’inspecte la console, j’ai trouvé que la version du compilateur maven est 2.5.1, mais j’essaie de construire mon projet avec maven 3.2.2.So, après avoir écrit la version exacte dans pom.xml, cela fonctionne bien .. Voici le tag complet:

<plugin>
  <groupId>org.Apache.maven.plugins</groupId>
  <artifactId>maven-compiler-plugin</artifactId>
  <version>3.2</version>
  <configuration>
   ....
  <configuration>
</plugin>
1
TinyOS

Moi aussi j'ai fait face à un problème similaire et ma résolution était différente. Je suis allé à la ligne de code mentionnée et passée au caractère (pour SpanishTest.Java [31, 81], allez à la 31ème ligne et au 81ème caractère espaces compris). J'ai observé une apostrophe en commentaire qui était à l'origine du problème. Bien que ce ne soit pas une erreur, le compilateur Maven signale un problème et dans mon cas, il était possible de supprimer le caractère "illégal" de Maven. Lol.

1
Siddhartha Tripathy

Définir l'attribut incodign dans le plugin maven-compiler fonctionne pour moi. L'exemple de code est le suivant

<plugin>
    <groupId>org.Apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>2.3.2</version>
    <configuration>
        <source>1.6</source>
        <target>1.6</target>
        <encoding>UTF-8</encoding>
    </configuration>
</plugin>
0
Jorge Santos Neill