Wenn ich maven install
mein Multi-Module-Maven-Projekt ausführe, erhalte ich immer die folgende Ausgabe:
[WARNING] File encoding has not been set, using platform encoding UTF-8, i.e. build is platform dependent!
Also habe ich ein bisschen gegoogelt, aber alles was ich finden kann ist, dass ich hinzufügen muss:
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
... zu meiner pom.xml. Aber es ist schon da (beim Elternteil pom.xml
).
Die Konfiguration <encoding>
für das Maven-Resources-Plugin oder das Maven-Compiler-Plugin behebt das Problem ebenfalls nicht.
Also, was ist das Problem?
Antworten:
OK, ich habe das Problem gefunden.
Ich verwende einige Berichts-Plugins. In der Dokumentation des fehlersicheren Maven-Plugins ( http://maven.apache.org/plugins/maven-failsafe-plugin/integration-test-mojo.html ) habe ich festgestellt, dass die
<encoding>
Konfiguration - natürlich -${project.reporting.outputEncoding}
standardmäßig verwendet wird . Also habe ich die Eigenschaft als untergeordnetes Element desproject
Elements hinzugefügt und jetzt ist alles in Ordnung:Siehe auch http://maven.apache.org/general.html#encoding-warning
quelle
Dies wäre zusätzlich zu den vorherigen, wenn jemand auf ein Problem mit skandischen Buchstaben stößt, das mit der obigen Lösung nicht gelöst werden kann.
Wenn die Java-Quelldateien skandische Buchstaben enthalten, müssen sie von dem zum Kompilieren verwendeten Java korrekt interpretiert werden . (zB skandische Buchstaben in Konstanten)
Selbst wenn die Dateien in UTF-8 gespeichert sind und der Maven für die Verwendung von UTF-8 konfiguriert ist, verwendet das vom Maven verwendete System Java weiterhin den Systemstandard (z. B. in Windows: cp1252).
Dies ist nur sichtbar, wenn die Tests über Maven ausgeführt werden (möglicherweise werden die Werte dieser Konstanten in Tests gedruckt. Die gedruckten Skandalbuchstaben werden als '<?>' Angezeigt). Wenn sie nicht ordnungsgemäß getestet werden, werden die Klassendateien als Kompilierungsergebnis beschädigt unbemerkt gelassen.
Um dies zu verhindern, müssen Sie das zum Kompilieren verwendete Java für die Verwendung der UTF-8-Codierung festlegen . Es reicht nicht aus, die Codierungseinstellungen in der maven pom.xml zu haben. Sie müssen die Umgebungsvariable festlegen: JAVA_TOOL_OPTIONS = -Dfile.encoding = UTF8
Wenn Sie Eclipse unter Windows verwenden, müssen Sie möglicherweise die zusätzlich verwendete Codierung festlegen (wenn Sie einen einzelnen Test über Eclipse ausführen).
quelle
-Dfile.encoding
ob Sie E / A in Java verwenden, ohne explizit eine Codierung anzugeben (was nicht empfohlen wird). Ich verstehe nicht, was dies mit skandischen Buchstaben in Java-Quelldateien zu tun hat. Nicht-ASCII in Java-Quelldateien funktioniert mit Maven, wennproject.build.sourceEncoding
es richtig eingestellt ist, wie in Ethan Leroys Antwort beschrieben.javac
, wird die vonproject.build.sourceEncoding
(Sie können dies überprüfenmvn -X
) festgelegte Codierung weitergegeben , sodass ich nicht sehe, wie das, was Sie beschreiben, notwendig ist. Wenn in Ihrem Projekt immer noch Codierungsprobleme auftreten, sollten Sie dies als separate Frage in Betracht ziehen - anscheinend stoßen Sie auf ein anderes Problem. Stellen Sie im Idealfall einen reproduzierbaren Testfall auf.Wenn Sie die obigen Antworten kombinieren, sollte schließlich eine für UTF-8 konfigurierte pom.xml so aussehen.
pom.xml
quelle
Es scheint, dass Leute eine Inhaltscodierung mit einer erstellten Datei- / Ressourcencodierung mischen. Es reicht nicht aus, nur Maven-Eigenschaften zu haben. Mit
-Dfile.encoding=UTF8
nicht wirksam. Um Probleme mit der Codierung zu vermeiden, sollten Sie die folgenden einfachen Regeln befolgenStellen Sie die Codierung immer explizit ein, wenn Sie mit Dateien, Zeichenfolgen und E / A in Ihrem Code arbeiten. Wenn Sie diese Regel nicht befolgen, hängt Ihre Anwendung von der Umgebung ab. Das ist
-Dfile.encoding=UTF8
genau für die Konfiguration der Laufzeitumgebung verantwortlich, aber wir sollten uns nicht darauf verlassen. Wenn Sie Tausende von Clients haben, ist es aufwändiger, Systeme zu konfigurieren und Probleme zu finden. Sie haben nur eine zusätzliche Abhängigkeit davon, die Sie vermeiden können, indem Sie sie explizit festlegen. Die meisten Methoden in Java, die eine Standardcodierung verwenden, werden aufgrund dessen als veraltet markiert.Stellen Sie sicher, dass der Inhalt, mit dem Sie arbeiten, auch dieselbe Codierung aufweist, die Sie erwarten. Ist dies nicht der Fall, spielen die vorherigen Schritte keine Rolle! Zum Beispiel wird eine Datei nicht korrekt verarbeitet, wenn ihre Codierung nicht UTF8 ist, Sie es aber erwarten. So überprüfen Sie die Dateicodierung unter Linux:
Hoffe, dass dies für jemanden nützlich sein wird.
quelle
Versuche dies:
quelle
In meinem Fall habe ich das
maven-dependency-plugin
so verwendet, um das Problem zu beheben, musste ich die folgende Eigenschaft hinzufügen:Siehe Apache Maven Resources Plugin / Angeben eines Zeichenkodierungsschemas
quelle