web-dev-qa-db-de.com

Fehler: nicht mappbares Zeichen zum Kodieren von UTF8 während der Maven-Kompilierung

Ich kompiliere ein Paket mit Maven und es wird ein Build-Fehler mit folgendem Kompilierungsfehler angezeigt:

SpanishTest.Java [31, 81] nicht zuordenbares Zeichen zur Kodierung von UTF8

Ich suchte online und für viele Leute, das Ändern der Quellcodierung von UTF-8 auf ISO-8859-1 scheint zu funktionieren, aber ich bekomme immer noch denselben Kompilierungsfehler. Ich verwende 32-Bit-Ubuntu. So sieht das Tag in meiner pom.xml aus

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

Selbst wenn ich <project.build.outputEncoding>-Tag in ISO-8859-1 ändere, erhalte ich immer noch den Fehler. Kann es an der Java-Version liegen? Ich habe sowohl Sun Java als auch openjdk auf meinem System installiert.

Kann mir jemand bitte sagen, was zu tun ist.

Vielen Dank 

47
Yogesh

Konfigurieren Sie das Maven-Compiler-Plugin so, dass es dieselbe Zeichencodierung verwendet, in der Ihre Quelldateien codiert sind (z. B.):

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

Viele Maven-Plugins verwenden standardmäßig die Eigenschaft "project.build.sourceEncoding", sodass die meisten Plugins durch die Einstellung in pom abgedeckt werden.

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

Ich bevorzuge es jedoch, die Kodierung in jeder Plugin-Konfiguration festzulegen, die es unterstützt, da ich explizit sein möchte.

Wenn Ihr Quellcode vom maven-compiler-plugin kompiliert wird, werden Ihre Quellcodedateien vom Compiler-Plugin mit der Codierung eingelesen, mit der das Compiler-Plugin konfiguriert ist. Wenn Ihre Quelldateien eine andere Kodierung haben als das Compiler-Plugin, sind möglicherweise nicht beide Zeichen in beiden Kodierungen vorhanden.

Viele Leute ziehen es vor, die Kodierung ihrer Quelldateien auf UTF-8 zu setzen, um dieses Problem zu vermeiden. Dazu können Sie in Eclipse mit der rechten Maustaste auf ein Projekt klicken und Eigenschaften-> Ressource-> Textdatei-Kodierung auswählen und in UTF-8 ändern. Dadurch werden alle Ihre Quelldateien in UTF-8 codiert. (Sie sollten das Maven-Compiler-Plugin auch explizit wie oben erwähnt für die Verwendung der UTF-8-Codierung konfigurieren.) Da Ihre Quelldateien und das Compiler-Plugin beide dieselbe Codierung verwenden, sollten Sie beim Kompilieren keine nicht zuordenbaren Zeichen mehr verwenden.

Hinweis: Sie können die Dateikodierung auch in Eclipse global festlegen, indem Sie auf Fenster-> Voreinstellungen-> Allgemein-> Arbeitsbereich-> Textdatei-Kodierung klicken. Sie können die Kodierung auch nach Dateityp über Fenster-> Voreinstellungen-> Allgemein-> Inhaltstypen festlegen.

63
BenjaminLinus

Wenn die obige Antwort nicht funktioniert, ändern Sie die Codierung in cp1252 oder entfernen Sie alle Vorkommen des Sonderzeichens manuell. Für mich verursachte ein Sonderzeichen das Problem, das sich in einem Kommentarblock befand. 

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

PS: Ich habe GNU/Linux OS (Ubuntu) verwendet. 

18
false9striker

Ich bin gerade auf dieses Problem gestoßen und habe das Problem so gelöst: Ich habe die anstößige .Java-Datei in Notepad ++ geöffnet und im Encoding-Menü "In UTF-8 ohne BOM konvertieren" ausgewählt. Gerettet. Re-ran Maven, alles lief in Ordnung. 

Wenn die anstößige Ressource nicht in UTF-8 codiert war - wie Sie es für Ihr Plug-In für Maven-Compiler konfiguriert haben - würden Sie im Menü Encoding von Np ++ ein Aufzählungszeichen neben der current -codierung (in meinem Fall) sehen es wurde auf "Encode in ANSI" gesetzt).

Ihr Plug-in für das Maven-Compiler hat also den Java-Compiler mit der Option -encoding auf UTF-8 aufgerufen. Der Compiler hat jedoch eine ANSI-codierte Quelldatei gefunden und diese als Fehler gemeldet. Früher war dies eine Warnung in Java 5, wird aber in Java 6+ als Fehler behandelt

10
Peter Perháč

Dies geschieht im folgenden Szenario: Wenn Sie unter Windows arbeiten, ist IDE höchstwahrscheinlich so konfiguriert, dass Dateien in Cp1252 bearbeitet werden, einer Microsoft-Anpassung von latin-11. Der Entwickler checkt ein, und der Continuous Integration-Server (normalerweise unter Linux, der heutzutage alles aus Utf8 besteht) holt die Datei ab und versucht, als UTF-8-Datei zu kompilieren.

Ändern Sie die Kodierung incp1252. Das funktioniert. Um zukünftige Probleme dieser Art zu vermeiden, verwenden Sie auf allen Entwicklercomputern die gleiche Kodierung.

Viel Glück...

7
James

In meinem Fall habe ich dieses Problem mit einem solchen Ansatz gelöst: 

  1. Neue Umgebungsvariable setzen: Java_TOOL_OPTIONS = -Dfile.encoding=UTF8
  2. Oder MAVEN_OPTS= -Dfile.encoding=UTF-8 setzen
3
BSeitkazin

Als ich die Konsole inspizierte, stellte ich fest, dass die Version des Maven-Compilers 2.5.1 ist. Auf der anderen Seite versuche ich, mein Projekt mit Maven 3.2.2 zu erstellen. Nachdem ich also die genaue Version in pom.xml geschrieben habe, funktioniert es gut .. Hier ist der vollständige Tag:

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

Ich hatte auch ein ähnliches Problem und meine Lösung war anders. Ich ging zu der erwähnten Codezeile und ging zu dem Zeichen (Für SpanishTest.Java [31, 81] gehen Sie zur 31. Zeile und 81. Zeichen einschließlich Leerzeichen). Ich habe in einem Kommentar einen Apostroph beobachtet, der das Problem verursacht hat. Der Maven-Compiler meldet zwar ein Fehler, aber in meinem Fall konnte der "illegale" Charakter von Maven entfernt werden. Lol.

1

Setzen Sie das incodign-Attribut in maven-compiler-Plugin für mich Das Codebeispiel lautet wie folgt

<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