2012-05-11 9 views
40

Acabo de empezar a usar Maven y he leído que los complementos son componentes adicionales que se pueden utilizar.
Una estructura típica de pom.xml archivo esComplementos en Maven y POM.xml

<project> 
    <groupId>org.koshik.javabrains</groupId> 
    <artifactId>JarName</artifactId> (A fldernamed JarName was created) 
    <version>1.0-SNAPSHOT</version> 
    <packaging>jar</packaging> 

    <name>JarName</name> 
    <url>http://maven.apache.org</url> 

    <properties> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    </properties> 

    <dependencies> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>3.8.1</version> 
     <scope>test</scope> 
    </dependency> 
    </dependencies> 
</project> 

Pregunta: ¿Dónde debo insertar una etiqueta plugin? tales como los siguientes:

<plugin> 
    <groupId>org.jibx</groupId> 
    <artifactId>jibx-maven-plugin</artifactId> 
    <version>1.2.4</version> 
    <executions> 
    <execution> 
     <goals> 
     <goal>bind</goal> 
     </goals> 
    </execution> 
    </executions> 
</plugin> 

Antes de la dependencia o después de la etiqueta dependency? ¿Importa?

Respuesta

40
<project> 
    <groupId>org.koshik.javabrains</groupId> 
    <artifactId>JarName</artifactId> (A fldernamed JarName was created) 
    <version>1.0-SNAPSHOT</version> 
    <packaging>jar</packaging> 

    <name>JarName</name> 
    <url>http://maven.apache.org</url> 

    <properties> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    </properties> 

    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.jibx</groupId> 
       <artifactId>jibx-maven-plugin</artifactId> 
       <version>1.2.4</version> 
       <executions> 
        <execution> 
         <goals> 
          <goal>bind</goal> 
         </goals> 
        </execution> 
       </executions> 
      </plugin> 
     </plugins> 
    </build> 

    <dependencies> 
     <dependency> 
      <groupId>junit</groupId> 
      <artifactId>junit</artifactId> 
      <version>3.8.1</version> 
      <scope>test</scope> 
     </dependency> 
    </dependencies> 
</project> 

También puede colocar plugins en la sección de <build><profile> si utiliza perfiles de Maven. El orden no importa.

+0

Tanque mucho. –

2

Puede insertar su segundo fragmento en cualquier lugar del archivo pom.xml entre dos etiquetas <plugins></plugins>.

4

<plugin> debe colocarse en la sección <plugins> que debe colocarse en la sección <build> o <pluginManagement>. No importa el orden de la sección <dependency> o <build>.

La referencia completa sobre pom.xml está aquí: http://maven.apache.org/pom.html

3

Si desea utilizar el plugin de acumulación se puede utilizar la siguiente estructura.

<project> 
<build> 
    <plugins> 
    </plugins> 
</build> 
</project> 
+0

bien. ¿Quiere decir que para agregar una etiqueta de complemento al archivo de arriba solo necesito agregar .. y no es necesario agregar la etiqueta ya que está presente en la parte superior. Estoy en lo correcto ? – Rajeshwar

+0

Sí, no es necesario agregar el proyecto nuevamente. Acabo de dar la estructura completa. –

2

El orden de las secciones en POM no importa. En general, hay complementos de compilación y creación de informes en Maven. Tu caso es usar el plugin de compilación así que debes poner este bloque <plugin> en la sección <project><build><plugins>....

Consulte this para obtener información básica sobre los complementos.

5

Una aclaración finales en dos puntos importantes

Dónde colocar plugin
Un plugin de hecho hay que añadir en la mayoría de los casos dentro de la sección build/plugins, sin embargo hay una diferencia importante entre colocarlo dentro de plugins contra colocarlo dentro de pluginManagement/plugins.

Este malentendido es menudo la causa de un plugin no se invoca en Maven o un solución de problemas más difíciles:

  • complementos, situado dentro build/plugins son directamente parte de la construcción Maven por defecto, si especifican un execution o si configuran algo para la compilación predeterminada (ver a continuación)
  • Los complementos bajo build/pluginManagement/plugins no son necesariamente parte de la compilación predeterminada de Maven, es decir, es una gestión, es una pista para maven: si utilizas este complemento, entonces usa la versión, la configuración, las ejecuciones que especifico aquí, en esta administración.

    ¿Pero qué pasa a usar significa? Medios: si el mismo complemento es también presente en la sección build/plugins, luego aplique esta gestión (y solo entonces será efectiva); o si el complemento es invocado por defecto por Maven, luego también aplíquelo.

    Pero, ¿cómo se invoca un complemento de forma predeterminada? Esa es parte de la filosofía principal detrás de maven: convención sobre la configuración. Por convención, cuando especifica un cierto packaging (predeterminado jar, pero puede ser war por ejemplo), desea que se invoquen ciertos complementos. Para construir un jar, by default invoque el maven-jar-plugin; para construir un war, by default invoque el maven-war-plugin y así sucesivamente. Por lo tanto, si especifica una configuración de complemento en el build/pluginManagement/plugin para un complemento que tiene un enlace predeterminado a la compilación Maven, entonces también se usará. Se requiere

pedidos
En cuanto al orden de las secciones dentro del archivo pom.xml, una aclaración adicional: es de hecho irrelevante en la mayoría de los casos, sin embargo, el orden de plugin elemento alguna en el build/plugins la sección puede ser importante. Desde Maven 3.0.3 (MNG-2258), se invocarán diferentes ejecuciones de complemento asociadas a la misma fase Maven en su orden de declaración en el archivo pom.xml. Es decir, el pedido es importante en este caso, ya que puede afectar el comportamiento de la compilación.

Además, también el orden de las declaraciones dependency puede afectar su compilación hacia Dependency Mediation, es decir, la primera dependencia declarada gana en caso de conflicto contra una dependencia transitiva. Entonces, una vez más, el pedido de es importante en ciertos casos.

Por último, pero no menos importante, a pesar de pedidos no es importante para otras secciones del archivo pom.xml, buen hábito es seguir oficial Maven recommendations y, como una versión simplificada, siga este orden de declaración:

<project> 
    <modelVersion/> 

    <parent/> 

    <groupId/> 
    <artifactId/> 
    <version/> 
    <packaging/> 

    <properties/> 

    <dependencyManagement/> 
    <dependencies/> 

    <build/> 

    <reporting/> 

    <profiles/> 
</project> 

El sortpom-maven-plugin también se puede utilizar para aplicar automáticamente este ordenamiento estándar, simplemente llamando al siguiente en el archivo en cuestión pom.xml:

mvn com.github.ekryd.sortpom:sortpom-maven-plugin:2.5.0:sort \ 
    -Dsort.keepBlankLines -Dsort.predefinedSortOrder=recommended_2008_06 

Para la lectura adicional:

Cuestiones relacionadas