2016-06-13 7 views
3

Einfache Sache: Ich möchte Builds über Checkstyle brechen können, wenn ausgewählte Dateien (.java, .xml) nicht richtig codiert sind (Ich möchte UTF-8 in Quelldateien erzwingen).Wie überprüft man die verwendete Codierung in Quelldateien mit dem Checkstyle-Plugin?

Ich verwende derzeit checkstyle für eine Reihe anderer build-breakers, wie die Durchsetzung von korrekten LineFeeds und/oder die Verwendung von Tab-Zeichen, aber es scheint nicht so etwas wie ein FileEncodingChecker zu sein.

Frage: Wenn checkstyle das einfach nicht kann: Gibt es ein anderes Plugin, das diesen Job erledigen könnte?

Antwort

2

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.

+0

@ 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