Maven-Codierung (Quellen und Ressourcen) wird von der Standard-project.build.sourceEncoding
-Eigenschaft behandelt, die tatsächlich vorhanden sein sollte und auf den UTF-8
-Wert eingestellt werden sollte, als eine gute Vorgehensweise.
Von offizieller Dokumentation der maven-resources-plugin
die besten Praxis ist Codierung ${project.build.sourceEncoding}
für das Kopieren von gefilterten Ressourcen über die Eigenschaft zu definieren, die in dem pom Eigenschaften Abschnitt
up Diese Eigenschaft nimmt
definiert werden sollen als Standardwert der encoding
Eigenschaft der maven-compiler-plugin
und der encoding
Eigenschaft der maven-resources-plugin
.
weiter um seine Präsenz zu erzwingen, könnte man dann mit der maven-enforcer-plugin
und seiner requireProperty
Regel, um auf UTF-8
die Existenz der project.build.sourceEncoding
Eigenschaft und dessen Wert zu erzwingen. Das heißt, der Build würde fehlschlagen, wenn die Eigenschaft nicht festgelegt UND nicht diesen genauen Wert hätte.
Im Folgenden ein Beispiel für eine solche Konfiguration, um Ihre pom.xml
Datei, build/plugins
Abschnitt hinzuzufügen:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-enforcer-plugin</artifactId>
<version>1.4.1</version>
<executions>
<execution>
<id>enforce-property</id>
<goals>
<goal>enforce</goal>
</goals>
<configuration>
<rules>
<requireProperty>
<property>project.build.sourceEncoding</property>
<message>Encoding must be set and at UTF-8!</message>
<regex>UTF-8</regex>
<regexMessage>Encoding must be set and at UTF-8</regexMessage>
</requireProperty>
</rules>
<fail>true</fail>
</configuration>
</execution>
</executions>
</plugin>
Hinweis könnte das gleiche für die project.reporting.outputEncoding
Eigenschaft erfolgen.
Literaturhinweise auf Stack-Überlauf:
Bonus: Da wir auf Stack-Überlauf sind, würde der CEO wahrscheinlich glücklich sein, seinen alten Artikel zu sehen, wieder zurück: The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets
-Test
Angesichts der folgenden Java-Code:
package com.sample;
public class Main {
public void 漢字() {
}
}
und Einstellung der folgenden in Maven:
<properties>
<project.build.sourceEncoding>US-ASCII</project.build.sourceEncoding>
</properties>
Würde tatsächlich Lässt die Erstellung fehlschlagen, da US-ASCII
7 Bits ist und ungültige Zeichenfehler zur Folge haben. Dasselbe würde nicht für UTF-8
passieren, das stattdessen 8 Bits verwendet.
@ a-di-matteo: Danke für diese umfassende Antwort, funktioniert perfekt für mich. Ich bin immer noch ein wenig unglücklich darüber, zwei Plugins zu verwenden, um ein (IMHO) einfaches Build-Breaking-Szenario zu erreichen. – Rob