2008-10-13 14 views
5

Ich habe eine Checkstyle-Unterdrückung Filter-Setup (z. B. ignorieren magische Zahlen in Einheit Testcode).checkstyle + Unterdrückungsfilter

Die Suppression-XML-Datei befindet sich im selben Ordner wie die Checkstyle-XML-Datei. Allerdings, wo diese Datei tatsächlich variiert: auf meinem Windows-Dev-Box ist es in d: \ dev \ shared \ checkstyle \ config auf dem Linux-CI-Server wird es in/root/repo/shared/checkstyle/config auf sein Eine andere Entwicklerbox könnte es überall geben (sie checken ihren SVN Repo nach).

Die einzige "konsistente" Sache ist, dass die Unterdrückungsdatei immer im selben Ordner wie die Checkstyle-XML-Datei ist. Ich kann nicht herausfinden, wie sichergestellt werden kann, dass diese Datei immer konsistent aufgenommen wird. Ich weiß auch nicht, warum checkstyle eingebettete Unterdrückung innerhalb der Checkstyle-XML-Datei nicht unterstützt.

Hilfe?

Antwort

10

Ich hatte das gleiche Problem mit der Checkstyle-Unterdrückung Konfiguration, wenn ich hin und her zwischen Linux und Windows ging. Hier ist, wie ich es in meinem Ant-basierten Build-System gelöst habe:

Grundsätzlich injiziere ich den richtigen plattformspezifischen Verzeichniswert in die Haupt-Checkstyle-Konfigurationsdatei, indem ich eine Checkstyle-Eigenschaftendatei mit einem Ant-Build-Skript konfiguriere.

Meine Haupt-Checkstyle-Konfigurationsdatei hat eine SuppressionFilter Moduldeklaration, wie unten gezeigt. Der Wert der checkstyle-suppressions-file Eigenschaft stammt aus einem Check Properties-Datei:

<module name="SuppressionFilter"> 
    <property name="file" value="${checkstyle-suppressions-file}"/> 
</module> 

Die Check Eigenschaften Datei nicht statisch ist, wird es von einem Ant-Build-Skript aus einer Properties erzeugt Vorlage template-checkstyle.properties genannt Datei. Hier ist, was die Vorlage wie für die Unterdrückungen Datei Eigenschaft aussieht:

[email protected][email protected]/checkstyle_suppressions.xml 

Meine Ant-Build-Skript kopiert diese Datei in eine Datei mit dem Namen checkstyle.properties. Die Kopie hat das spezielle Token mit dem richtigen Wert des Verzeichnisses ersetzt, in dem die Unterdrückungen Datei gefunden wird:

<copy file="${scm.dir}/template-checkstyle.properties" tofile="${scm.dir}/checkstyle.properties"> 
    <filterset> 
     <filter token="SCM_DIR" value="${scm.dir.unix}"/> 
    </filterset> 
</copy> 

Nun, wo sich der Wert von scm.dir.unix kam aus? Nun, es ist abgeleitet von einer Eigenschaft meines Build, lesen Sie weiter. Sie müssen einen solchen Wert mit den angegebenen Verzeichniswerten angeben.

Beachten Sie, dass es ein leicht nicht offensichtliches Problem bezüglich der Art gibt, in der Sie dieses Verzeichnis angeben. Ich sage, dass der Wert scm.dir.unix von einer Build-Eigenschaft abgeleitet ist, da ich beobachtet habe, dass die Haupt-Checkstyle-Konfigurationsdatei keine umgekehrten Schrägstriche, d. H. Windows-Pfadtrennzeichen, im Wert der file-Eigenschaft des SuppressionFilter-Moduls enthalten kann. Zum Beispiel führt die Angabe von C:\foo\bar\baz zu einer Checkstyle-Fehlermeldung, die besagt, dass C:foobarbaz nicht gefunden werden kann.Ich arbeite, um dieses durch die scm.dir Verzeichnis Build-Eigenschaft auf einen "Unix" -Format mit Ant pathconvert Aufgabe "Umwandlung":

<pathconvert targetos="unix" property="scm.dir.unix"> 
    <path location="${scm.dir}"/> 
</pathconvert> 

Dann rufe ich die checkstyle Ant-Task wie folgt aus:

<checkstyle config="${scm.dir}/checkstyle_checks.xml" 
      properties="${scm.dir}/checkstyle.properties"> 
    <!-- details elided --> 
</checkstyle> 

Der Aufruf zu der checkstyle Aufgabe injiziert die Schlüssel/Wert-Paare, die in der checkstyle.properties-Datei enthalten sind, in die Haupt-Checkstyle-Konfiguration.

Wenn Sie möchten, können Sie die vollständige Skripte sehen here

hoffe, das hilft

+0

Danke für die Tipps, mein Ameisenbau ist jetzt in Ordnung, ignorieren magische Zahlen in Test-Klassen (es ist ein Anfang!). Ich musste eine Änderung an Ihrem mitgelieferten Code vornehmen (als Referenz für alle anderen, die später dazu kommen könnten), der Task fehlt ein "filtering = true"; zumindest wenn ich mit meiner Version von ant laufe. –

2

ich den absoluten Pfad zu dem Verzeichnis, wo build.xml die ant.file Variable und den Namen des Projekts liegt mit:

<project name="common" ... > 
    <dirname property="thisdir" file="${ant.file.common}"/> 

Dann kann ich einen absoluten Pfad zu meinem check Configakten verketten:

checkstyle.suppressions.file=${thisdir}/qclib/checkstyle-suppressions.xml 

Da die thisdir Variable von ant stammt, scheint es keine Pfadtrennerumwandlung zu benötigen.

2

Wenn Sie mit Eclipse arbeiten und die Unterdrückung Datei im selben Verzeichnis wie die externe Check Config haben, können Sie einen Unterdrückungsfilter wie folgt ein:

<module name="SuppressionFilter"> 
    <property name="file" value="${config_dir}/my_suppressions.xml"/> 
</module> 

Sie müssen auch die $ definieren { config_dir} Eigenschaft in der Konfiguration Check:

Eclipse-Einstellungen -> "Checkstyle" -> wählen Sie Ihre cs Config -> "Eigenschaften .." -> "Weitere Eigenschaften .."

eine Eigenschaft für das definieren Check Konfigurationsverzeichnis:

config_dir ---> ${config_loc} 
6

In Eclipse habe ich die folgenden, die mir brachte keine zusätzlichen Eigenschaften hinzufügen erfordern:

<module name="SuppressionFilter"> 
    <property name="file" value="${samedir}/suppressions.xml"/> 
</module> 
1

denke ich, Robert Antwort kann für Ant und Eclipse einfache Lösung erweitert werden:

Fügen Sie die Unterdrückung Datei in Ihrem Config XML wie folgt aus:

<module name="SuppressionFilter"> 
    <property name="file" value="${samedir}/suppressions.xml"/> 
</module> 

Jetzt ist Eclipse zufrieden und findet die Datei.

Um Ameise zu aktualisieren, wie dies Ihr Ziel etwas zu arbeiten:

<checkstyle config="${checkstyle.config}/checkstyle-checks.xml"> 
    <!-- ... --> 
    <property key="samedir" value="${checkstyle.config}"/> 
</checkstyle> 

Hoffnung, das hilft.

Verwandte Themen