2012-01-23 21 views
16

Intentar establecer una configuración de estilo de control personalizado en el pom maven de acuerdo con guidelines on the apache site no funciona en un caso muy simple.Maven Checkstyle configLocation ignorado?

he creado un proyecto, MiProyecto, utilizando la estructura de directorios recomendados por Maven (es decir src/main/java /, src/main/resources), un único archivo MyClass.java:

package com.myproject; 

public class MyClass { 

    public static void main(String[] args) { 
     System.out.println("This line is longer than 80 characters which returns an error in sun_checks.xml, however my_checks.xml allows for much longer lines and will not return a long line error."); 
    } 
} 

un vacío Checkstyle archivo, my_checks.xml:

<?xml version="1.0"?> 
<!DOCTYPE module PUBLIC 
    "-//Puppy Crawl//DTD Check Configuration 1.2//EN" 
    "http://www.puppycrawl.com/dtds/configuration_1_2.dtd"> 

<module name="Checker"> 
    <property name="severity" value="warning"/> 
    <module name="TreeWalker"> 
    </module> 
</module> 

y un archivo pom de acuerdo con las especificaciones de la guía:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 

    <modelVersion>4.0.0</modelVersion> 
    <groupId>com.myproject</groupId> 
    <artifactId>A_Project</artifactId> 
    <name>A Project</name> 
    <version>1.0.0</version> 

    <reporting> 
    <plugins> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-checkstyle-plugin</artifactId> 
     <version>2.8</version> 
     <configuration> 
      <configLocation>my_checks.xml</configLocation> 
     </configuration> 
     </plugin> 
    </plugins> 
    </reporting> 
</project> 

Ejecutando 'mvn -X checkstyle: checkstyle' está usando sun_checks.xml (predeterminado) en lugar de usar la configuración en el archivo my_checks.xml, que se puede ver tanto con los errores de estilo de comprobación resultantes como con la salida de depuración (ej. '[DEPURACIÓN] request.getConfigLocation() config/sun_checks.xml').

Sé que my_checks.xml es válido porque el checkstyle.config.location se puede cambiar en las propiedades utilizando la estrategia descrita por Carboni en un , pero esto causa problemas cuando se mueve a proyectos de varios módulos y difiere del 'oficial' apache maven checkstyle instrucciones.

+0

¿Dónde está exactamente su config xml? – Corubba

Respuesta

10

Esto funciona para mí cuando:

  1. coloco my_checks.xml en el nivel raíz (paralelo a pom.xml), y
  2. Wrap el plug-in en el elemento <build> (en contraposición a <reporting>)

Con esos cambios, veo lo siguiente:

[DEBUG] Configuring mojo 'org.apache.maven.plugins:maven-checkstyle-plugin:2.8:checkstyle' with basic configurator --> 
[DEBUG] (f) cacheFile = /home/dave/tech/lang/java/web/struts/playground/so/s231_01/target/checkstyle-cachefile 
[DEBUG] (f) configLocation = my_checks.xml 
... etc ... 
[DEBUG] request.getConfigLocation() my_checks.xml 
[DEBUG] The resource 'my_checks.xml' was not found with resourceLoader 
... etc ... 
[DEBUG] The resource 'my_checks.xml' was not found with resourceLoader org.codehaus.plexus.resource.loader.URLResourceLoader. 
[DEBUG] The resource 'my_checks.xml' was not found with resourceLoader org.codehaus.plexus.resource.loader.JarResourceLoader. 
[DEBUG] The resource 'my_checks.xml' was found as /home/dave/tech/lang/java/web/struts/playground/so/s231_01/my_checks.xml. 

consulta la usage documentation, específicamente:

Para configurar específicamente el Checkstyle plugin, es necesario el agregarlo en la sección <build> de su pom.xml como se muestra en el ejemplo siguiente.

El uso de <reporting> es para mvn site.

+2

Gracias Dave Newton! El problema fue utilizar en lugar de . Hubiera sido útil si la guía Maven Checkstyle proporcionara ejemplos de estilo de control en lugar de ejemplos de sitios. – HeavyE

+0

@HeavyE No hay problema :) Técnicamente lo hace, y los [documentos de objetivos] (http://maven.apache.org/plugins/maven-checkstyle-plugin/plugin-info.html) distinguen entre el complemento y los objetivos de informe , pero es un poco opaco si no está muy cómodo con la terminología (como es mucha documentación de Maven;) –

+1

Si está utilizando Maven 3, consulte https://cwiki.apache.org/MAVEN/maven-3x-compatibility -notes.html # Maven3.xCompatibilityNotes-SiteandReporting "configuración del complemento en la sección ya no afecta a los complementos en la sección del POM". Para Maven 2, puede que necesite duplicar bits entre informes y compilación. – Bae

22

Sí, he encontrado las directrices en el sitio apache desactualizadas. A través de la búsqueda de Internet y el desguace de bits, he logrado resolver esto.

Pasar a la etiqueta <build> funcionó por un tiempo, pero cuando se actualizó al último checkstyle, se ignoraba nuevamente.He encontrado que tenía que establecer una propiedad:

<project ...> 

.... 

    <properties> 
    <checkstyle.config.location>properties/checkstyle-configuration.xml</checkstyle.config.location> 
    </properties> 

    <build> 
    ... 

     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-checkstyle-plugin</artifactId> 
     <version>2.9.1</version> 
     </plugin> 
    </plugins> 
    </build> 

    ... 

</project> 

Esto es parte de mi ejemplo de cómo crear su propia comprobación personalizada Checkstyle encontrado aquí:
http://blog.blundellapps.com/create-your-own-checkstyle-check/

y tomada desde el código fuente aquí :
https://github.com/blundell/CreateYourOwnCheckStyleCheck

+1

¡Thx! esto funciona para las otras propiedades de configuración también: '' Nota: tuve que agregar el archivo: a la ubicación – IDKFA