2011-07-19 13 views
6

Me gustaría usar el complemento maven enforcer para verificar si tengo clases duplicadas en mi camino. He intentado con el ejemplo desde here.uso del complemento maven enforcer

Pero cuando lo ejecuto este modo:

mvn enforcer:enforce

me sale esto:

No se pudo ejecutar meta org.apache.maven.plugins: maven-ejecutor-plugin: 1.0.1: aplicar (cli por defecto) en el datapopulator del proyecto: Los parámetros 'reglas' para objetivo org.apache.maven.plugins: maven-enforcer-plugin: 1.0.1: enforce son faltantes o no válidos

¿Hay alguna manera de usar esto correctamente?

editar # 1

Si el cambio de mi config para esto:

 <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-enforcer-plugin</artifactId> 
      <version>1.0.1</version> 
      <executions> 
       <execution> 
        <id>enforce-versions</id> 
        <goals> 
         <goal>enforce</goal> 
        </goals> 
        <configuration> 
         <rules> 
          <AlwaysPass /> 
         </rules> 
         <fail>true</fail> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 

produce el mismo error.

Respuesta

15

La razón por la que su primera versión no funcionó es porque hay una diferencia entre una configuración de complemento dentro de la etiqueta de ejecución y una configuración de complemento fuera de la etiqueta de ejecución. La ejecución solo se usa cuando el complemento se activa mediante una fase especial de la compilación completa de Maven.

El Maven guide to configuration lo explica mejor:

Configuraciones dentro de la etiqueta difieren de los que están fuera, en que no se pueden utilizar de una invocación de línea de comando directo. En cambio, solo se aplican cuando se invoca la fase del ciclo de vida a la que están vinculados. Alternativamente, si mueve una sección de configuración fuera de la sección de ejecuciones, se aplicará globalmente a todas las invocaciones del complemento.

+4

El hacer cumplir objetivo es [obligado] (http://maven.apache.org/enforcer/maven-enforcer-plugin/enforce-mojo.html) a la fase del ciclo de vida 'validate'. Por lo tanto, para ejecutar 'enforcer: enforce' puede simplemente escribir ' mvn validate' – rwitzel

+2

Sin perfiles, ¿hay alguna forma de definir las ejecuciones sin llamar a 'validate'? Tengo un escenario donde solo quiero validar 'requireReleaseDeps', pero nada más en esta etapa del proceso de compilación. – Snekse

3

No sé por qué no funcionará con la configuración de estar en una ejecución, pero esto funcionó para mí:

 <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-enforcer-plugin</artifactId> 
      <version>1.0</version> 
      <configuration> 
       <rules> 
        <banDuplicateClasses> 
         <findAllDuplicates>true</findAllDuplicates> 
        </banDuplicateClasses> 
       </rules> 
       <fail>false</fail> 
      </configuration> 
      <dependencies> 
       <dependency> 
        <groupId>org.codehaus.mojo</groupId> 
        <artifactId>extra-enforcer-rules</artifactId> 
        <version>1.0-alpha-1</version> 
       </dependency> 
      </dependencies> 
     </plugin> 
11

Pruebe esto, moviendo la configuración fuera de las ejecuciones, por lo que no está vinculada a la fase del ciclo de vida.

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-enforcer-plugin</artifactId> 
    <version>1.0.1</version> 
    <executions> 
     <execution> 
      <id>enforce-versions</id> 
      <goals> 
       <goal>enforce</goal> 
      </goals> 
     </execution> 
    </executions> 
    <configuration> 
     <rules> 
      <AlwaysPass /> 
     </rules> 
     <fail>true</fail> 
    </configuration> 
</plugin> 

Ahora cuando haces mvn enforcer:enforce, recoge las reglas de su pom.xml.

3

ver estas answers

Usted puede utilizar la ejecución de línea de comando predeterminado identificación especial, default-CLI para alegar ésta (ver Maven Docs), véase mi ejemplo a continuación. Esto funciona, al menos en 3.1.1 y el artículo citado dice que debería funcionar con 2.2.0+

mvn enforcer:enforce 

Sin embargo, si usted está usando anterior Maven 3.1.1 (Puedo confirmar que funciona en 3.3.3 con enforcer v 1.4.1) puede especificar el ID de ejecución que desea utilizando la nueva sintaxis @ (consulte Maven JIRA y las respuestas anteriores);

p. Ej. para el siguiente ejemplo use

mvn enforcer:[email protected] 

Aquí hay un fragmento de mi pom;

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-enforcer-plugin</artifactId> 
      <version>1.4.1</version> 
      <executions> 
       <execution> 
        <id>dependency-convergence</id> 
        <phase>install</phase> 
        <goals> 
         <goal>enforce</goal> 
        </goals> 
        <configuration> 
         <rules> 
          <DependencyConvergence /> 
         </rules> 
         <fail>true</fail> 
        </configuration> 
       </execution> 
       <execution> 
        <id>default-cli</id> 
        <goals> 
         <goal>enforce</goal> 
        </goals> 
        <configuration> 
         <rules> 
          <DependencyConvergence/> 
         </rules> 
         <fail>true</fail> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 
     ... 
+0

Acabo de hacer una solicitud de extracción para aclarar el documento con respecto a esto: https://github.com/apache/maven-site/pull/7 –

Cuestiones relacionadas