Frage

Als ich maven install auf meinem Multi-Modul laufen Maven-Projekt ich die folgende Ausgabe immer erhalten:

[WARNING] File encoding has not been set, using platform encoding UTF-8, i.e. build is platform dependent!

Also, gegoogelt ich ein bisschen herum, aber alles, was ich finden kann, ist, dass ich hinzufügen:

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

... auf meine pom.xml. Aber es ist schon da (in der Mutter pom.xml).

Konfigurieren <encoding> für die Maven-Ressourcen-Plugin oder der Maven-Compiler-Plugin nicht behebt auch nicht.

Also, was ist das Problem?

War es hilfreich?

Lösung

OK, fand ich das Problem.

Ich benutze Reporting Plugins. In der Dokumentation der Fail-safe-maven-Plugin ( http: //maven.apache.org/plugins/maven-failsafe-plugin/integration-test-mojo.html ) ich fand, dass die <encoding> Konfiguration - natürlich - als Standard verwendet ${project.reporting.outputEncoding}. Also habe ich die Eigenschaft als untergeordnetes Element des project Element hinzugefügt und alles ist in Ordnung jetzt:

<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

Andere Tipps

Dies zusätzlich zu vorherigen wäre, wenn jemand ein Problem mit scandic Buchstaben trifft, die nicht mit der Lösung oben gelöst wird.

Wenn die Java-Quelldateien enthalten scandic Buchstaben müssen sie richtig durch die interpretiert werden Java verwendet für die Erstellung . (Z.B. scandic in Konstanten verwendet Buchstaben)

Auch, dass die Dateien in UTF-8 gespeichert werden und die Maven konfiguriert ist, um die Verwendung von UTF-8, wobei das System Java durch die Maven verwendet wird noch den System-Standard (zB unter Windows:. Cp1252).

Dies ist nur sichtbar, die Tests über Maven ausgeführt (möglicherweise Drucken der Werte dieser Konstanten in Tests. Die gedruckten scandic Buchstaben zeigen würde ‚‘) Wenn sie nicht richtig getestet, diese verfälschen würde die Klassendateien als Kompilierung Ergebnis und unbemerkt bleiben.

Um dies zu verhindern, müssen Sie die setzen Java verwendet für die Erstellung UTF-8-Codierung zu verwenden. Es ist nicht genug, um die Kodierungseinstellungen im Maven pom.xml zu haben, müssen Sie die Umgebungsvariable setzen: JAVA_TOOL_OPTIONS = -Dfile.encoding = UTF8

Auch wenn Eclipse-in Windows verwenden, können Sie die Codierung zusätzlich dazu verwendet gesetzt (wenn Sie einzelnen Test über Eclipse ausgeführt werden).

Wenn Sie die Antworten oben kombinieren, endlich eine pom.xml, dass für konfiguriert UTF-8 sollte so sein scheinen.

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>

Versuchen Sie diese:

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

Es scheint, die Menschen mit einer eingebauten Datei / Ressourcen Codieren einen Inhaltscodierung mischen. nur maven Eigenschaften ist nicht genug. Mit -Dfile.encoding=UTF8 nicht wirksam. Um Probleme zu vermeiden, die mit kodiert, sollten Sie die folgenden einfachen Regeln

folgen
  1. Set Maven-Codierung, wie oben beschrieben:
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
  1. immer gesetzt kodieren explizit, wenn die Arbeit mit Dateien, Strings, IO in Ihrem Code. Wenn Sie diese Regel nicht folgen, hängen Sie Ihre Anwendung auf die Umwelt. Die -Dfile.encoding=UTF8 genau ist verantwortlich für die Laufzeitumgebung Konfiguration, aber wir sollten nicht auf sie angewiesen. Wenn Sie Tausende von Kunden haben, dauert es mehr Aufwand zu konfigurieren Systeme und Probleme zu finden, weil es. Sie müssen nur eine zusätzliche Abhängigkeit von ihm, die Sie, indem Sie es explizit vermeiden. Die meisten Methoden in Java, die eine Standard-Codierung verwenden, sind gekennzeichnet, weil es veraltet.

  2. Stellen Sie sicher, dass der Inhalt, mit denen Sie arbeiten, auch in der gleichen Codierung ist, dass Sie erwarten. Wenn dies nicht der Fall, keine Rolle spielt die vorherigen Schritte! Zum Beispiel wird keine Datei korrekt verarbeitet werden, wenn seine Codierung nicht UTF8, aber Sie erwarten, dass es. Um zu überprüfen, Dateiverschlüsselung unter Linux:

  

$ file --mime F_PRDAUFT.dsv

  1. Force-Clients / Server-Set kodiert, explizit in Anfragen / Antworten, hier sind Beispiele:
@Produces("application/json; charset=UTF-8")
@Consumes("application/json; charset=UTF-8")

Hope wird dies jemandem nützlich sein.

In meinem Fall habe ich wurde mit der maven-dependency-plugin so, um das Problem zu beheben ich die folgende Eigenschaft hinzuzufügen hatte:

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

Siehe Apache Maven Ressourcen Plugin / Angeben eines Zeichencodierungsschema

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top