Domanda

Ho un'impostazione del filtro di soppressione dello stile di controllo (ad esempio ignora i numeri magici nel codice di test unitario).

Il file XML di soppressione si trova nella stessa cartella del file XML di stile di controllo. Tuttavia, dove questo file è effettivamente varia: sulla mia finestra di sviluppo di Windows è in d: \ dev \ shared \ checkstyle \ config sul server CI Linux sarà in / root / repo / shared / checkstyle / config su un altro box di sviluppatori potrebbe essere ovunque (controllano il loro repository svn su).

L'unica " coerente " cosa è che il file di soppressione si trova sempre nella stessa cartella del file xml checkstyle. Non riesco a capire come garantire che questo file sia sempre raccolto in modo coerente. Inoltre non so perché checkstyle non supporti la soppressione incorporata all'interno del file xml di checkstyle.

qualche aiuto?

È stato utile?

Soluzione

Ho avuto lo stesso problema con la configurazione di soppressione di Checkstyle mentre andavo avanti e indietro tra Linux e Windows. Ecco come l'ho risolto nel mio sistema di build basato su Ant:

Fondamentalmente, inserisco il valore di directory specifico specifico della piattaforma nel file di configurazione principale di Checkstyle configurando un file delle proprietà di Checkstyle con uno script di build Ant.

Il mio file di configurazione principale di Checkstyle ha una dichiarazione del modulo SuppressionFilter come mostrato di seguito. Il valore della proprietà checkstyle-suppressions-file proviene da un file delle proprietà di Checkstyle:

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

Il file delle proprietà Checkstyle non è statico, è generato da uno script di build Ant da un modello di file delle proprietà chiamato template-checkstyle.properties . Ecco come appare il modello per la proprietà del file di soppressione:

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

My Ant build script copia questo file in un file chiamato checkstyle.properties . La copia ha il token speciale sostituito con il valore corretto della directory in cui si trova il file di soppressione:

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

Ora, da dove viene il valore di scm.dir.unix ? Bene, è derivato da una proprietà della mia build, continua a leggere. Dovrai specificare tale valore con i valori della directory che hai citato.

Si noti che esiste un problema leggermente non ovvio relativo al modo in cui si specifica questa directory. Dico che il valore scm.dir.unix è derivato da una proprietà build perché ho osservato che il file di configurazione Checkstyle principale non può contenere barre rovesciate, ovvero caratteri di separazione del percorso di Windows, nel valore di file del modulo SuppressionFilter . Ad esempio, specificare qualcosa come C: \ foo \ bar \ baz porta a un messaggio di errore Checkstyle che dice che C: foobarbaz non è stato trovato. Mi aggiro attorno a " convertendo " la proprietà di costruzione della directory scm.dir su un " unix " formato con l'attività pathconvert di Ant:

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

Quindi chiamo il checkstyle task Ant come questo:

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

La chiamata all'attività checkstyle inietta le coppie chiave / valore contenute nel file checkstyle.properties nella configurazione principale di Checkstyle.

Se vuoi, puoi vedere gli script completi qui

Spero che questo aiuti

Altri suggerimenti

In eclipse ho inserito quanto segue che non mi richiedeva l'aggiunta di ulteriori proprietà:

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

Ottengo il percorso assoluto della directory in cui build.xml risiede usando la variabile ant.file e il nome del progetto:

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

Quindi posso concatenare un percorso assoluto per i miei file di configurazione di checkstyle:

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

Poiché la variabile thisdir proviene da ant, non sembra aver bisogno della conversione del separatore di percorso.

Se stai lavorando con eclipse e hai il file di soppressione nella stessa directory della configurazione esterna dello stile di controllo, puoi impostare un filtro di soppressione come questo:

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

Devi anche definire la proprietà $ {config_dir} nella configurazione dello stile di controllo:

Preferenze di Eclipse - > & Quot; Checkstyle " - > Scegli la tua configurazione cs - > " Proprietà .. " - > " Proprietà aggiuntive .. "

Definire una proprietà per la directory di configurazione checkstyle:

config_dir --->  ${config_loc}

Penso che la risposta di Robert possa essere estesa a una soluzione semplice per formica ed Eclipse :

Includi il file di soppressione nel tuo XML di configurazione in questo modo:

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

Ora Eclipse è soddisfatto e trova il file.

Per far funzionare la formica aggiorna il tuo bersaglio a qualcosa del genere:

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

Spero che questo aiuti.

Da CheckStyle 4.26.0 è possibile utilizzare costanti predefinite nei file di configurazione.

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

  
      
  • $ {basedir} & amp; $ {project_loc}: viene mappato nella directory del progetto corrente
  •   
  • $ {workspace_loc}: viene mappato alla directory corrente dell'area di lavoro Eclipse
  •   
  • $ {config_loc} & amp; $ {samedir} - viene mappato nella directory in cui si trova il file di configurazione
  •   

Se desideri condividere la configurazione con Maven dovrai "quotare alias" le costanti "eclissi" nella tua configurazione POM (nella sezione dei rapporti) usando " propertyExpansion " elemento di configurazione:

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

Il " propertyExpansion " è ispirato a: https://github.com/checkstyle/checkstyle/ blob / master / pom.xml # L582 .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top