2012-05-11 24 views
40

Ho appena iniziato a utilizzare Maven e ho letto che i plug-in sono componenti aggiuntivi che possono essere utilizzati.
una struttura tipica di pom.xml file èPlugin in Maven e 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> 

Domanda: Dove devo inserire un tag plugin? come il seguente:

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

Prima della dipendenza o dopo il tag dependency? Importa?

risposta

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> 

È possibile anche inserire i plugin nella sezione <build> di <profile> se si utilizzano profili di Maven. L'ordine non ha importanza.

+0

Ti accumulo molto. –

2

È possibile inserire il secondo frammento in qualsiasi punto del file pom.xml tra due tag <plugins></plugins>.

4

<plugin> deve essere inserito nella sezione <plugins> che deve essere inserita nella sezione <build> o <pluginManagement>. L'ordine della sezione <dependency> o <build> non ha importanza.

Il riferimento completo su pom.xml è qui: http://maven.apache.org/pom.html

3

Se si desidera utilizzare il plugin per accumulo è possibile utilizzare la struttura sottostante.

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

Va bene. Vuoi dire per aggiungere il tag del plugin al file sopra ho solo bisogno di aggiungere .. e non è necessario aggiungere il tag poiché è già presente nella parte superiore. Ho ragione ? – Rajeshwar

+0

Sì, non è necessario aggiungere nuovamente il progetto. Ho appena dato la struttura completa. –

2

L'ordine delle sezioni in POM non è importante. In generale, ci sono plugin di compilazione e plugin di reporting in Maven. Il tuo caso è di usare il plugin di compilazione in modo da mettere questo blocco <plugin> nella sezione <project><build><plugins>....

Vedere this per alcune nozioni di base sui plug-in.

5

Una precisazione in ritardo su due punti importanti

Dove posizionare plugin
Un plugin dovrebbe infatti essere aggiunti nella maggior parte dei casi all'interno della sezione build/plugins, tuttavia c'è una differenza importante tra il collocamento entro plugins contro il posizionamento entro pluginManagement/plugins.

Questo malinteso è spesso la causa di un plugin non Richiamato in Maven o un risoluzione dei problemi più difficili:

  • Plugin sotto build/plugins sono direttamente parte della generazione predefinito Maven, se specificano un execution o se configurano qualcosa per la build predefinita (vedi sotto)
  • I plug-in sotto build/pluginManagement/plugins non sono necessariamente parte del build predefinito di Maven, ovvero, i s una gestione, è un suggerimento per farti sentire: ti capita di usare questo plugin, quindi ti preghiamo di usare la versione, la configurazione, le esecuzioni che specifichi qui, in questa gestione.

    Ma che cosa significa utilizzare ? Mezzi: se lo stesso plugin è anche presente nella sezione build/plugins, quindi applicare questa gestione (e solo allora sarà efficace); o se il plugin viene richiamato per impostazione predefinita da Maven, quindi applicarlo anche.

    Ma come viene richiamato un plug-in per impostazione predefinita? Questo fa parte della filosofia principale di maven: convention over configuration. Per convenzione, quando si specifica un certo packaging (valore predefinito jar, ma può essere war ad esempio), si desidera richiamare determinati plug-in. Per creare un jar, by default, richiamare lo maven-jar-plugin; per creare un war, by default, richiamare lo maven-war-plugin e così via. Pertanto, se si specifica una configurazione di plug-in in build/pluginManagement/plugin per un plug-in che ha un'associazione predefinita per il build di Maven, verrà utilizzato anche.

ordinazione
Per quanto riguarda l'ordinamento delle sezioni all'interno del file pom.xml, un ulteriore chiarimento è richiesto: è infatti irrilevante nella maggior parte dei casi, tuttavia l'ordine di plugin elemento wihtin il build/plugins la sezione potrebbe essere importante Dal momento che Maven 3.0.3 (MNG-2258), diverse esecuzioni di plug-in collegate alla stessa fase di Maven verranno richiamate nell'ordine di dichiarazione nel file pom.xml. Cioè, l'ordine è importante in questo caso, poiché potrebbe influire sul comportamento della compilazione.

Inoltre, anche al fine di dependency dichiarazioni possono influenzare il vostro costruire verso Dependency Mediation, vale a dire, le prime vittorie di dipendenza dichiarati in caso di conflitto contro una dipendenza transitiva. Quindi, ancora una volta, l'ordinamento è importante in alcuni casi.

Ultimo ma non meno importante, anche se l'ordinazione non è importante per altre sezioni del file pom.xml, buona abitudine è quella di seguire ufficiale Maven recommendations e, come una versione semplificata, seguire questo ordine di dichiarazione:

<project> 
    <modelVersion/> 

    <parent/> 

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

    <properties/> 

    <dependencyManagement/> 
    <dependencies/> 

    <build/> 

    <reporting/> 

    <profiles/> 
</project> 

Il sortpom-maven-plugin può anche essere utilizzato per applicare automaticamente questo ordinamento di serie, è sufficiente invocare il seguente sulla questione pom.xml del file:

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

Per approfondimenti:

Problemi correlati