Frage

Ich habe eine Check Entstörfilter Einrichtung (zum Beispiel ignorieren magische Zahlen in Unit-Test-Code).

Die Unterdrückung xml-Datei befindet sich im selben Ordner wie die check XML-Datei. Wo jedoch diese Datei tatsächlich ist unterschiedlich: auf meiner Windows Dev-Box ist es in d: \ dev \ shared \ check \ config auf dem Linux-CI-Server wird es in / root / repo / shared / check / config auf einem anderen Entwickler-Box könnte es überall sein (sie prüfen ihre SVN-Repo-out to).

Die einzige „konsistent“ ist, dass die Unterdrückung Datei immer im selben Ordner wie die check XML-Datei ist. Ich kann nicht arbeiten, wie sichergestellt wird, dass diese Datei konsequent immer abgeholt. Ich weiß nicht, warum auch check keine eingebettete Unterdrückung innerhalb der Check XML-Datei nicht unterstützt.

Jede Hilfe?

War es hilfreich?

Lösung

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

Grundsätzlich spritze ich den richtigen, plattformspezifische Verzeichnis Wert in die Hauptdatei Check Konfiguration durch eine Check Eigenschaften mit einem Ant-Build-Skript-Datei zu konfigurieren.

Meine Hauptcheckkonfigurationsdatei hat eine SuppressionFilter Moduldeklaration wie unten gezeigt. Der Wert der checkstyle-suppressions-file Eigenschaft stammt aus einer Check Eigenschaften-Datei:

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

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

checkstyle-suppressions-file=@SCM_DIR@/checkstyle_suppressions.xml

Meine Ant-Build-Skript kopiert diese Datei in eine Datei mit dem Namen checkstyle.properties. Die Kopie hat die 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 kommen aus? Nun, es ist abgeleitet von einer Eigenschaft meiner bauen, lesen Sie weiter. Sie benötigen einen solchen Wert mit den Verzeichnis Werte angeben, die Sie genannt haben.

Beachten Sie, dass es ein leicht nicht offensichtliches Problem ist die Art und Weise über, in dem Sie das Verzeichnis angeben. I sagen, dass der Wert aus einer scm.dir.unix build Eigenschaft abgeleitet ist, weil ich, dass die Hauptcheckkonfigurationsdatei nicht beobachtet Schrägstriche enthalten kann, das heißt Windows-Pfadtrennzeichen, in dem Wert der Eigenschaft des file SuppressionFilter Moduls. Zum Beispiel spezifiziert etwas wie C:\foo\bar\baz führt zu einer Meldung Checkfehlermeldung, dass C:foobarbaz nicht gefunden werden kann. Ich arbeite, um diesen 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 der checkstyle Aufgabe spritzt die Schlüssel / Wert-Paare in der checkstyle.properties Datei in die Hauptcheck Konfiguration enthalten ist.

Wenn Sie möchten, können Sie die vollständige Skripte finden Sie unter hier

Hope, das hilft

Andere Tipps

In Eclipse habe ich die folgende, die mich brachte keine zusätzliche Eigenschaften hinzufügen erfordern:

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

ich den absoluten Pfad zu dem Verzeichnis, in dem build.xml des ant.file Variable und den Namen des Projektes 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 aus Ameise kommt, es scheint nicht Pfadseparator Umwandlung zu müssen.

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

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

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

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

Definieren Sie eine Eigenschaft für das Checkkonfigurationsverzeichnis:

config_dir --->  ${config_loc}

Ich denke, Robert Antwort kann für auf einfache Lösung erweitert werden ant und Eclipse :

die Unterdrückung Datei in Ihrem Config XML wie folgt umfassen:

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

Nun, Eclipse ist zufrieden und findet die Datei.

Um Ameise zu arbeiten um Ihr Ziel zu so etwas wie dieser zu aktualisieren:

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

Hope, das hilft.

Da Check 4.26.0 Sie vordefinierte Konstanten in Ihren Konfigurationsdateien verwenden können.

( https://github.com/jshiell/checkstyle-idea/issues/ 217 ):

  
      
  • $ {basedir} & $ {project_loc} - dem aktuellen Projektverzeichnis abgebildet wird
  •   
  • $ {workspace_loc} - auf den aktuellen Eclipse-Workspace-Verzeichnis abgebildet wird
  •   
  • $ {config_loc} & $ {samedir} - in das Verzeichnis liegt die Konfigurationsdatei in kartiert erhalten
  •   

Wenn Sie mit Maven die Config teilen müssen Sie „alias“ die in der POM-Konfiguration „Konstanten eclipse“ (im Berichtsabschnitt), um das „propertyExpansion“ Konfigurationselement mit:

<plugin>
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-checkstyle-plugin</artifactId>
   <version>3.0.0</version>
   <configuration>
      <configLocation>${project.basedir}/quality/checkstyle/dap_checkstyle_checks.xml</configLocation>
      <propertyExpansion>basedir=${project.basedir}</propertyExpansion>
   </configuration>
   <reportSets>
      <reportSet>
         <reports>
            <report>checkstyle</report>
         </reports>
      </reportSet>
   </reportSets>
</plugin>

Die "propertyExpansion" ist inspiriert von: https: // Github .com / check / check / Blob / Master / pom.xml # L582 .

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