In un progetto multi-modulo Maven, come posso disabilitare un plugin in un bambino?

Ho un progetto multi-modulo di maven (ragazzo, ho scritto quella apertura troppe volte su questo sito). Quasi tutti i moduli (cioè quelli che contengono il codice ) devono eseguire il plug-in maven-site per generare report sulla copertura del codice, ecc. Questi hanno una configurazione condivisa dettagliata – quali report eseguire, quali file includere / escludere determinati plugin, ecc.

Tuttavia, ci sono alcuni moduli che si occupano di packaging: esecuzione del plug-in di assembly per generare un tarball, ecc. Questi non ottengono nulla dall’esecuzione di un report sul sito – non c’è codice da analizzare, nessun test da segnalare.

Quindi ho molti moduli che devono condividere la configurazione del plugin e alcuni moduli che non devono eseguire il plugin , preferibilmente a tutti. Posso fare il primo (condivisione della configurazione) se inserisco il plugin nella sezione del padre POM, ma non riesco a distriggersre il plugin quando è necessario in questo caso. Posso fare il secondo (evitare di eseguire il plugin) se sposto la configurazione verso il basso in ogni POM di ciascun modulo, ma in questo caso non riesco a capire un buon modo per condividere le informazioni di configurazione.

È quello che voglio: configurazione condivisa, per un plugin che a volte è disabilitato da un modulo figlio – anche ansible? Se é cosi, come?

Con “esegui il plug-in”, presumo che tu intenda che il plug-in è legato a una fase del ciclo di vita e vorresti separarlo in alcuni moduli. Innanzitutto, potresti prendere in considerazione la modifica dell’eredità POM in modo che i moduli che non richiedono i plug-in abbiano un genitore e quelli che hanno un genitore diverso. Se non si desidera farlo, è ansible impostare esplicitamente la fase di esecuzione su “nothing” in un modulo figlio. Ad esempio, se hai una configurazione pom genitore come questa:

  org.codehaus.mojo exec-maven-plugin 1.2.1   i-do-something initialize  exec   ... lots of configuration     

Quindi in un modulo figlio, potresti fare questo:

  org.codehaus.mojo exec-maven-plugin 1.2.1   i-do-something     

Poiché è lo stesso plug-in e lo stesso id di esecuzione, sovrascrive la configurazione specificata in parent e ora il plug-in non è associato a una fase del progetto figlio.

La risposta di Ryan Stewart funziona se l’esecuzione che desideri eliminare nel genitore principale viene contrassegnata con un id . Se, tuttavia, il padre genitore non codifica l’esecuzione con un id (e, ovviamente, non puoi modificare quel pom genitore), allora ho scoperto che fare quanto segue sopprime l’azione del padre genitore.

  1. Per prima cosa imposta la fase dell’esecuzione su none
  2. Crea un’altra esecuzione, dagli un id e fai ciò che ti serve.
  3. eseguire mvn help:effective-pom per confermare che ha correttamente soppresso ciò che era necessario soppresso dal padre pom.

Ecco un esempio: ecco come appariva il mio padre genitore:

   maven-source-plugin 2.1.2   package  jar    true  

Avevo bisogno di cambiare l’objective in jar-no-fork . Si noti che l’esecuzione nel pom principale non ha un id che potrei usare per disabilitarlo. Quindi ecco cosa ha aggiunto a mio figlio pom:

   org.apache.maven.plugins maven-source-plugin   none   attach-sources  jar-no-fork     

Di conseguenza, questo è il modo in cui si presenta il pom efficace:

   maven-source-plugin 2.2.1   none  jar    false     attach-sources  jar-no-fork    false     true   false    

Ciò ha assicurato che il jar objective non venga mai eseguito e che venga eseguito solo l’objective jar-no-fork , che è ciò che volevo ottenere.