it-swarm.com.de

Wie konfiguriere ich die Kodierung in Maven?

Wenn ich maven install in meinem Multi-Modul-Maven-Projekt ausführte, 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 (im übergeordneten pom.xml).

Das Konfigurieren von <encoding> für das maven-resources-plugin oder das maven-compiler-plugin kann dies auch nicht beheben. 

Also, was ist das Problem?

305
Ethan Leroy

OK, ich habe das Problem gefunden.

Ich benutze einige Plugins zur Berichterstellung. In der Dokumentation des Failsafe-Maven-Plugins ( http://maven.Apache.org/plugins/maven-failsafe-plugin/integration-test-mojo.html ) habe ich festgestellt, dass die <encoding> Konfiguration - von natürlich - verwendet standardmäßig ${project.reporting.outputEncoding}. Also habe ich die Eigenschaft als untergeordnetes Element des project-Elements hinzugefügt und jetzt ist alles in Ordnung:

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

Siehe auch  http://maven.Apache.org/general.html#encoding-warning

464
Ethan Leroy

Dies wäre zusätzlich zu den vorherigen, wenn jemand ein Problem mit Scandic-Briefen trifft, das mit der obigen Lösung nicht gelöst wird.

Wenn die Java-Quelldateien Scandic-Buchstaben enthalten, müssen sie von zum Kompilieren von Java richtig interpretiert werden. (z. B. in Konstanten verwendete Scandic-Buchstaben)

Auch 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 immer noch 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 Scandic-Buchstaben würden als '<?>' Anzeigen).). Wenn sie nicht ordnungsgemäß getestet werden, werden die Klassendateien als kompiliert Ergebnis und unbemerkt bleiben.

Um dies zu verhindern, müssen Sie Java wird zum Kompilieren verwendet eingestellt, um die UTF-8-Kodierung zu verwenden. __ Die Kodierungseinstellungen in der maven pom.xml sind nicht ausreichend Umgebungsvariable: Java_TOOL_OPTIONS = -Datei.encoding = UTF8

Wenn Sie Eclipse unter Windows verwenden, müssen Sie möglicherweise zusätzlich die verwendete Kodierung festlegen (wenn Sie einzelne Tests über Eclipse ausführen).

38

Wenn Sie die obigen Antworten kombinieren, sollte schließlich eine für UTF-8 konfigurierte pom.xml so aussehen.

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

Versuche dies:

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

In meinem Fall habe ich maven-dependency-plugin verwendet, um das Problem zu beheben, musste ich die folgende Eigenschaft hinzufügen:

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

Siehe Apache Maven Resources Plugin/Festlegen eines Zeichencodierungsschemas

1
isapir

Es scheint, dass die Leute eine Inhaltskodierung mit einer eingebauten Datei-/Ressourcenkodierung mischen. Nur Maven-Eigenschaften zu haben, reicht nicht aus. -Dfile.encoding=UTF8 ist nicht wirksam. Um Probleme mit der Kodierung zu vermeiden, sollten Sie die folgenden einfachen Regeln beachten

  1. Legen Sie die Maven-Codierung wie oben beschrieben fest:
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
  1. Legen Sie die Codierung immer explizit fest, wenn Sie mit Dateien, Zeichenfolgen IO in Ihrem Code arbeiten. Wenn Sie diese Regel nicht befolgen, hängt Ihre Anwendung von der Umgebung ab. Der -Dfile.encoding=UTF8 ist genau für die Konfiguration der Laufzeitumgebung verantwortlich, aber wir sollten uns nicht darauf verlassen. Wenn Sie Tausende von Clients haben, ist es umständlicher, Systeme zu konfigurieren und Probleme zu finden. Sie haben nur eine zusätzliche Abhängigkeit, die Sie vermeiden können, indem Sie sie explizit festlegen. Die meisten Methoden in Java, die eine Standardcodierung verwenden, werden deshalb als veraltet markiert.

  2. Stellen Sie sicher, dass sich der Inhalt, mit dem Sie arbeiten, auch in der gleichen Kodierung befindet, die Sie erwarten. Wenn nicht, spielen die vorherigen Schritte keine Rolle! Zum Beispiel wird eine Datei nicht korrekt verarbeitet, wenn die Kodierung nicht UTF8 ist, aber Sie dies erwarten. So überprüfen Sie die Dateikodierung unter Linux:

$ file --mime F_PRDAUFT.dsv

  1. Erzwingt die explizite Codierung von Clients/Servern in Anforderungen/Antworten. Hier einige Beispiele:
@Produces("application/json; charset=UTF-8")
@Consumes("application/json; charset=UTF-8")

Hoffe, das wird jemandem nützlich sein.

0
Alexandr