Domanda

Ho un genitore che configura alcuni plugin

<pluginManagement>
   </plugins>
      <plugin>
         <artifactId>gmaven-plugin</artifactId>
         ...
      </plugin>
      <plugin>
         <artifactId>maven-resources-plugin</artifactId>
         ...
      </plugin>
      <plugin>
         <artifactId>cargo-maven2-plugin</artifactId>
         ...
      </plugin>
   </plugins>
</pluginManagement>

E ho un albero di poms che rappresentano test di integrazione

A-\
   a1
   a2
B-\
   b1
   b2
C-\
   D-\
      d1
      d2

In ogni prodotto a, b, d che faccio

<build>
   <plugins>
      <plugin>
         <artifactId>gmaven-plugin</artifactId>
      </plugin>
      <plugin>
         <artifactId>maven-resources-plugin</artifactId>
      </plugin>
      <plugin>
         <artifactId>cargo-maven2-plugin</artifactId>
      </plugin>
   </plugins>
</build>

Il problema è quando dovrò aggiungere il quarto plug-in al processo di test di integrazione, ad esempio il mio plug-in personalizzato che dovrò spostare attraverso tutti i moduli di integrazione e fare l'aggiunta manuale.

Puoi consigliarmi di rimuovere <pluginManagement> per consentire a tutti i bambini di usarli implicitamente. Sì, ma nei prodotti che sono solo "pom" non voglio che i plugin facciano nulla: creare alcune risorse e mettere directory di configurazione jboss.

Mi chiedo ci sia una specie di

<pluginsBundle>
   <groupId>my.group</groupId>
   <artifactId>my-integration-test-bundle</artifactId>
   <plugins>
      <plugin>
         <artifactId>gmaven-plugin</artifactId>
      </plugin>
      <plugin>
         <artifactId>maven-resources-plugin</artifactId>
      </plugin>
      <plugin>
         <artifactId>cargo-maven2-plugin</artifactId>
      </plugin>
   </plugins>
</pluginsBundle>

Per permettermi di usarlo proprio come

   <plugin>
      <groupId>my.group</groupId>
      <artifactId>my-integration-test-bundle</artifactId>
      <runOnce>true</runOnce>
   </plugin>

Vorrei aggiungere opzioni come

<runOnce>true</runOnce>

per essere in grado di avviare il server delle applicazioni e distribuire la destinazione solo una volta al lancio di Maven.

È stato utile?

Soluzione

Non conosco un meccanismo che fa esattamente ciò di cui hai bisogno. La tua scommessa migliore è definire un pom padre con quei plugin definiti nella sezione build, piuttosto che nella sezione pluginManagement. In questo caso verrà sempre definita la configurazione del plugin. L'aggiunta della configurazione a un profilo nel genitore significa che puoi esercitare un certo controllo sull'attivazione di quei plugin.

Un perfezionamento da considerare è che puoi controllare l'attivazione di un profilo in base alla presenza o all'assenza di un file. In questo modo è possibile definire il profilo nel genitore, ma è disattivato in quel progetto a causa del file marcatore presente nel genitore. I progetti figlio non avrebbero il file marcatore nella loro fonte, quindi il profilo sarebbe attivato per quei progetti. Puoi invertire il comportamento utilizzando missing anziché exists se ciò ha senso per la maggior parte dei progetti.

<profile>
  <id>build</id>
  <activation>
    <file>
      <missing>src/main/resources/build.marker</missing>
      <!-- or if you want to enable the profile when the file does exist:
      <exists>src/main/resources/build.marker</exists-->
    </file>
  </activation>
  <build>
    </plugins>
      <plugin>
        <artifactId>gmaven-plugin</artifactId>
        ...
      </plugin>
      <plugin>
        <artifactId>maven-resources-plugin</artifactId>
        ...
      </plugin>
      <plugin>
        <artifactId>cargo-maven2-plugin</artifactId>
        ...
      </plugin>
    </plugins>
  </build>
</profile>

In alternativa, puoi provare a scrivere plugin personalizzati con un ciclo di vita che esegue tutti i mojos richiesti in un ciclo di vita biforcato. Di recente ho risposto a un'altra domanda con i dettagli su come eseguire questa operazione.

Un'altra alternativa è scrivere un altro plugin che utilizza Maven shared-io per applicare un descrittore al pom, quel descrittore può definire una configurazione arbitraria che viene unita al pom. Un'altra risposta descrive come ciò può essere fatto.

Altri suggerimenti

AFAIK, non c'è modo di dichiarare un pacchetto di plugin che potrebbe essere usato da qualche altra parte ... ma c'è eredità.

Che ne dici di creare un pom con la dichiarazione <plugins> nella sezione <build> e ereditare da questo pom nei tuoi progetti di test di integrazione? Sembra fattibile.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top