Domanda

Sto scrivendo un plug-in Maven (Mojo) che deve eseguire un set standard di altre esecuzioni di plug-in prima che venga eseguito.

Esiste un meccanismo per dichiarare tutti gli obiettivi all'interno del mio plugin, quindi non devo fare affidamento sul fatto che l'utente li definisca tutti nella loro POM?

È stato utile?

Soluzione

Puoi farlo definendo un ciclo di vita personalizzato e invocandolo prima che il tuo Mojo venga eseguito tramite l'annotazione esegui .

Nel tuo Mojo, dichiara nel Javadoc il ciclo di vita da eseguire:

/**
 * Invoke the custom lifecycle before executing this goal.
 * 
 * @goal my-goal
 * @execute lifecycle="my-custom-lifecycle" phase="process-resources"
 */
public class MyMojo extends AbstractMojo {
...

Quindi definire un ciclo di vita personalizzato in src / main / resources / META-INF / maven / lifecycle.xml.

Il ciclo di vita è un po 'simile ai componenti.xml di plexus, ma consente di specificare la configurazione per tali obiettivi.

Nota che la sintassi è leggermente diversa dalle configurazioni dei plugin nel pom. Definisci un obiettivo usando: come separatore anziché specificare gli elementi separati groupId, artefactId e version, altrimenti è sostanzialmente la stessa notazione dell'elemento di esecuzione di una configurazione di plugin nel pom. Puoi anche usare alcune proprietà in lifecycle.xml (anche se forse non tutte le proprietà sono supportate, dovrò verificarlo).

L'esempio seguente richiama due volte il plug-in di dipendenza con diverse configurazioni nella fase delle risorse di processo:

<lifecycles>
  <lifecycle>
    <id>download-dependencies</id>
    <phases>
      <phase>
        <id>process-resources</id>
        <executions>
          <execution>
            <goals>
              <goal>
                org.apache.maven.plugins:maven-dependency-plugin:copy-dependencies
              </goal>
            </goals>
            <configuration>
              <includeScope>compile</includeScope>
              <includeTypes>war</includeTypes>
              <overWrite>true</overWrite>
              <outputDirectory>
                ${project.build.outputDirectory}/wars
              </outputDirectory>
            </configuration>
          </execution>
          <execution>
            <goals>
              <goal>
                org.apache.maven.plugins:maven-dependency-plugin:copy-dependencies
              </goal>
            </goals>
            <configuration>
              <includeScope>compile</includeScope>
              <includeTypes>jar</includeTypes>
              <overWrite>true</overWrite>
              <outputDirectory>
                ${project.build.outputDirectory}/jars
              </outputDirectory>
            </configuration>
          </execution>
        </executions>
      </phase>
    </phases>
  </lifecycle>
</lifecycles>

Con questo approccio, il plug-in di dipendenza verrà invocato una volta per ogni configurazione nella fase processo-risorse del ciclo di vita del fork (tutto ciò che accade all'interno dell'esecuzione definita nel Mojo).

In lifecycle.xml è possibile definire più fasi e più esecuzioni per fase del ciclo di vita. Le fasi disponibili sono definite nel Ciclo di vita di Maven .

Puoi trovare ulteriori informazioni sui cicli di vita nel Creazione di un ciclo di vita personalizzato del libro Maven. Tuttavia non fornisce un elenco esaustivo di ciò che è consentito. L'unico altro riferimento che conosco è del Maven 2 alpha , quindi probabilmente non è quello up-to-date

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