L'esecuzione del plugin non è coperta dalla configurazione del ciclo di vita (archetipo JBossas 7 EAR)


123

Sto usando Eclipse 3.7 Indigo con Maven M2E Plugin 1.0.100.

Utilizzando l'archetipo JBoss 7.x JavaEE 6 EAR, il pom per EAR mi dà questo errore:

L'esecuzione del plugin non è coperta dalla configurazione del ciclo di vita: org.apache.maven.plugins: maven-ear-plugin: 2.6: generate-application-xml (esecuzione: default-generate-application-xml, phase: generate-resources)

<plugin>
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-ear-plugin</artifactId>
   <version>2.6</version>
   <configuration>
      <!-- Tell Maven we are using Java EE 6 -->
      <version>6</version>
      <!-- Use Java EE ear libraries as needed. Java EE ear libraries 
                  are in easy way to package any libraries needed in the ear, and automatically 
                  have any modules (EJB-JARs and WARs) use them -->
      <defaultLibBundleDir>lib</defaultLibBundleDir>
      <modules></modules>
   </configuration>
<plugin>

Risposte:


138

Questa è una "caratteristica" del plugin M2E che era stata introdotta qualche tempo fa. Non è direttamente correlato al plug-in JBoss EAR, ma accade anche con la maggior parte degli altri plug-in Maven.

Se hai un'esecuzione di plugin definita nel tuo pom(come l'esecuzione di maven-ear-plugin:generate-application-xml), devi anche aggiungere ulteriori informazioni di configurazione per M2E che dicono a M2E cosa fare quando la build viene eseguita in Eclipse, ad esempio se l'esecuzione del plugin viene ignorata o eseguita da M2E, dovrebbe essere fatto anche per build incrementali, ... Se mancano queste informazioni, M2E si lamenta mostrando questo messaggio di errore:

"L'esecuzione del plug-in non è coperta dalla configurazione del ciclo di vita"

Vedi qui per una spiegazione più dettagliata e alcune configurazioni di esempio che devono essere aggiunte al pom per far scomparire l'errore:

https://www.eclipse.org/m2e/documentation/m2e-execution-not-covered.html


70
@ Jan non capisco il concetto. M2E dovrebbe essere trasparente per l'utente. Fai quello che fa la riga di comando Maven, ma dall'interno di eclipse. Non dovrebbero esserci dati di configurazione pom per dire a M2E cosa fare. Se lo fa, allora è un cattivo design. A proposito, questi errori a volte scompaiono nelle versioni più recenti di Eclipse e M2E.
rapita l'

8
Sono d'accordo con rapito. Il mio POM non dipende da m2e e vorrei aggiungerne uno ora solo perché mi capita di utilizzare Eclipse come IDE. Questa è un'impostazione per altri che lavorano allo stesso progetto che potrebbero utilizzare un altro IDE come IntelliJ. Se m2e ha bisogno di questi suggerimenti, dovrebbe far parte della configurazione di m2e all'interno di Eclipse.
William

12
Alcuni obiettivi non hanno senso mentre sei in Eclipse. Ad esempio, ho progetti in cui i file ZIP vengono decompressi nella targetcartella. Non vorresti che fosse ripetuto "in modo incrementale" al salvataggio di ogni file sorgente. O forse non vuole che. Davvero, m2e non ha idea della tua build specifica. Puoi memorizzare ciò che m2e dovrebbe fare in Eclipse, POM, o eventualmente installare un connettore m2e che aggiunge più conoscenza a m2e per gestire la fase di costruzione. Queste sono le opzioni che dovresti vedere. Capisco che non vuoi rendere il tuo POM compatibile con m2e, ma è un bel posto per configurarlo centralmente per tutti i tuoi sviluppatori.
Sander Verhagen

3
Il problema è che la documentazione collegata per questo, come la maggior parte della documentazione su Maven o Eclipse. è abcacadabra. Non importa quanto si sforzino di spiegarlo chiaramente, la spiegazione si basa su troppi concetti che io come utente Maven relativamente nuovo non capisco e non so come cercare - tutto quello che trovo ha lo stesso problema: troppi inspiegabili concetti. La tecnologia è troppo complessa o la documentazione è troppo mal organizzata. In ogni caso, la curva di apprendimento è alta. Le risposte qui aggiungono molta chiarezza.
reinierpost

10
@RicardoGladwell Hai frainteso lo scopo dei voti negativi. La freccia dice "questa risposta non è utile" - e questo non è vero per questa risposta. Quindi, anche se non ti piace il tono con cui è scritta questa risposta, il voto negativo non era richiesto.
Dawood ibn Kareem

43

comunque è troppo tardi ma la mia soluzione era semplice fare clic con il tasto destro del mouse sul messaggio di errore in Eclipse e scegliere Correzione rapida >> Ignora per ogni pom con tali errori


3
Non è troppo tardi. Ho appena risolto il problema in questo modo!
reinierpost

2
Anch'io. Tutta questa ricerca e cercare di capire quale fosse il problema mi ha fatto venire il mal di testa, quindi l'ho ignorato :) Grazie.
dleerob

1
Questo ha funzionato per me. Sospetto che generi automaticamente ciò che è descritto dalla risposta di @ Jan che punta a eclipse.org/m2e/documentation/m2e-execution-not-covered.html perché l'unica modifica che ho visto dopo aver accettato la soluzione rapida è stata una modifica al mio pom. xml.
Michael Osofsky

Ho provato di nuovo su un'altra macchina e il problema è scomparso quando ho aggiornato da JBehave 3.9.4 a 3.9.5 poiché era il plug-in JBehave, nel mio caso, a creare l'errore (avevo generato la configurazione del plug-in da un archetipo JBehave Maven ( jbehave.org/reference/stable/archetypes.html ))
Michael Osofsky

30

Eclipse ha il concetto di build incrementali, che è incredibilmente utile in quanto consente di risparmiare molto tempo.

Come è utile

Supponi di aver appena modificato un singolo file .java. I costruttori incrementali saranno in grado di compilare il codice senza dover ricompilare tutto (il che richiederà più tempo).

Ora qual è il problema con i plugin Maven

La maggior parte dei plugin Maven non sono progettati per build incrementali e quindi creano problemi per m2e. m2e non sa se l'obiettivo del plugin è qualcosa di cruciale o se è irrilevante. Se esegue ogni plugin quando cambia un singolo file, ci vorrà molto tempo.

Questo è il motivo per cui m2e fa affidamento sulle informazioni dei metadati per capire come deve essere gestita l'esecuzione. m2e ha messo a punto diverse opzioni per fornire queste informazioni sui metadati e l'ordine di preferenza è il seguente (dal più alto al più basso)

  1. pom.xml file del progetto
  2. file genitore, nonno e così via pom.xml
  3. [m2e 1.2+] preferenze dell'area di lavoro
  4. estensioni m2e installate
  5. [m2e 1.1+] metadati della mappatura del ciclo di vita forniti dal plugin maven
  6. metadati di mappatura del ciclo di vita predefiniti forniti con m2e

1,2 si riferisce alla specifica della sezione pluginManagement nel tag del tuo file pom o di uno dei suoi genitori. M2E legge questa configurazione per configurare il progetto. Di seguito lo snippet indica a m2e di ignorare gli obiettivi jslinte compressdel plugin yuicompressor-maven

<pluginManagement>
        <plugins>
            <!--This plugin's configuration is used to store Eclipse m2e settings 
                only. It has no influence on the Maven build itself. -->
            <plugin>
                <groupId>org.eclipse.m2e</groupId>
                <artifactId>lifecycle-mapping</artifactId>
                <version>1.0.0</version>
                <configuration>
                    <lifecycleMappingMetadata>
                        <pluginExecutions>
                            <pluginExecution>
                                <pluginExecutionFilter>
                                    <groupId>net.alchim31.maven</groupId>
                                    <artifactId>yuicompressor-maven-plugin</artifactId>
                                    <versionRange>[1.0,)</versionRange>
                                    <goals>
                                        <goal>compress</goal>
                                        <goal>jslint</goal>
                                    </goals>
                                </pluginExecutionFilter>
                                <action>
                                    <ignore />
                                </action>
                            </pluginExecution>
                        </pluginExecutions>
                    </lifecycleMappingMetadata>
                </configuration>
            </plugin>
        </plugins>
    </pluginManagement>

3) Se non preferisci inquinare il tuo file pom con questi metadati, puoi salvarlo in un file XML esterno (opzione 3). Di seguito è riportato un file di mappatura di esempio che indica a m2e di ignorare gli obiettivi jslinte compressdel plugin yuicompressor-maven

<?xml version="1.0" encoding="UTF-8"?>
<lifecycleMappingMetadata>
    <pluginExecutions>
        <pluginExecution>
            <pluginExecutionFilter>
                <groupId>net.alchim31.maven</groupId>
                <artifactId>yuicompressor-maven-plugin</artifactId>
                <versionRange>[1.0,)</versionRange>
                <goals>
                    <goal>compress</goal>
                    <goal>jslint</goal>
                </goals>
            </pluginExecutionFilter>
            <action>
                <ignore/>
            </action>
        </pluginExecution>
    </pluginExecutions>
</lifecycleMappingMetadata>

4) Nel caso in cui non ti piaccia nessuna di queste 3 opzioni, puoi usare un connettore m2e (estensione) per il plugin maven, che a sua volta fornirà i metadati a m2e. È possibile visualizzare un esempio delle informazioni sui metadati all'interno di un connettore a questo collegamento . Avrai notato che i metadati si riferiscono a un configuratore. Ciò significa semplicemente che m2e delegherà la responsabilità a quella particolare classe java fornita dall'autore dell'estensione. Il configuratore può configurare il progetto (come aggiungere cartelle di origine aggiuntive, ecc.) E decidere se eseguire il plug-in Maven effettivo durante una build incrementale (se non gestito correttamente all'interno del configuratore, può portare a infinite build del progetto)

Fare riferimento a questi collegamenti per un esempio del configuratore ( link1 , link2 ). Quindi, nel caso in cui il plugin sia qualcosa che può essere gestito tramite un connettore esterno, puoi installarlo. m2e mantiene un elenco di tali connettori forniti da altri sviluppatori, noto come catalogo di scoperta. m2e ti chiederà di installare un connettore se non disponi già di metadati di mappatura del ciclo di vita per l'esecuzione tramite nessuna delle opzioni (1-6) e il catalogo di scoperta ha un'estensione che può gestire l'esecuzione.

L'immagine sotto mostra come m2e ti chiede di installare il connettore per il plugin build-helper-maven. installare il connettore suggerito dal catalogo di rilevamento.

5) m2e incoraggia gli autori del plug-in a supportare la compilazione incrementale e fornire la mappatura del ciclo di vita all'interno del plug-in maven stesso, il che significherebbe che gli utenti non dovranno utilizzare alcun mapping o connettore del ciclo di vita aggiuntivo, alcuni autori di plug-in lo hanno già implementato

6) Per impostazione predefinita m2e contiene i metadati della mappatura del ciclo di vita per la maggior parte dei plugin comunemente usati come maven-compiler-plugin e molti altri.

Ora torniamo alla domanda: probabilmente puoi semplicemente fornire una mappatura del ciclo di vita ignora in 1, 2 o 3 per quell'obiettivo specifico che ti sta creando problemi.


14

Una buona soluzione alternativa per ricordarti che m2e potrebbe essere configurato meglio, senza che il progetto erediti un indicatore di errore falso positivo, è semplicemente eseguire il downgrade di tali errori in avvertimenti:

Finestra -> Preferenze -> Maven -> Errori / Avvisi -> Esecuzione del plugin non coperta dalla configurazione del ciclo di vita = Avviso


12

Ho provato a eseguire un collegamento specifico subito dopo la pulizia, ad esempio dopo la pulizia (l'impostazione predefinita è la fase pulita). Questo ha funzionato per me con eclipse indigo. L'aggiunta di post-clean ha risolto il problema.

<executions>
  <execution>
    <configuration>
    </configuration>
   <phase>post-clean</phase>
    <goals>
      <goal>update-widgetset</goal>
    </goals>
  </execution>
</executions> 

11
Potresti spiegare perché funziona? "Appena aggiunto" e "risolto per me" non aumenta realmente la mia fiducia nel fatto che non abbia comportamenti nascosti indesiderati.
Kissaki

Abbastanza sicuro, ho un phasee un goalper il executionpom.xml che mi è stato dato, e ricevo ancora l'errore.
reinierpost

Signori, le mie scuse. Non sono un esperto esperto, volevo aiutare qualcuno alla ricerca di una soluzione rapida. Tuttavia, avrei dovuto dare più informazioni. Penso che il trucco qui sia l'inclusione della fase di esecuzione. Poiché mojo può definire con fasi di esecuzione, ho provato a eseguire un collegamento specifico subito dopo la pulizia, ad esempio dopo la pulizia (l'impostazione predefinita è la fase pulita). Questo ha funzionato per me con eclipse indigo. Probabilmente il plugin specifico potrebbe aver utilizzato alcune dipendenze dal pom principale? IIRC questo era un plugin basato su Vaadin.
Charith De Silva

2

Sono stato in grado di risolvere lo stesso problema con maven-antrun-plugin e jaxb2-maven-plugin in Eclipse Kepler 4.3 applicando questa soluzione: http://wiki.eclipse.org/M2E_plugin_execution_not_covered#Eclipse_4.2_add_default_mapping
Quindi il contenuto del mio% elipse_workspace_name% /. metadata / .plugins / org.eclipse.m2e.core / lifecycle-mapping-metadata.xml è il seguente:

<?xml version="1.0" encoding="UTF-8"?>
<lifecycleMappingMetadata>
  <pluginExecutions>
    <pluginExecution>
      <pluginExecutionFilter>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-antrun-plugin</artifactId>
        <versionRange>1.3</versionRange>
        <goals>
          <goal>run</goal>
        </goals>
      </pluginExecutionFilter>
      <action>
        <ignore />
      </action>
    </pluginExecution>
    <pluginExecution>
      <pluginExecutionFilter>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>jaxb2-maven-plugin</artifactId>
        <versionRange>1.2</versionRange>
        <goals>
          <goal>xjc</goal>
        </goals>
      </pluginExecutionFilter>
      <action>
        <ignore />
      </action>
    </pluginExecution>
  </pluginExecutions>
</lifecycleMappingMetadata>

* Ho dovuto riavviare Eclipse per vedere gli errori scomparsi.


1

A partire dalla versione 0.12 di Maven Eclipse (m2e) tutti gli obiettivi del ciclo di vita di Maven devono essere mappati su un'estensione m2e installata. In questo caso, maven-ear-pluginaveva un obiettivo non mappato default-generate-application-xml.

Puoi escludere obiettivi del ciclo di vita non mappati semplicemente seguendo le istruzioni qui:

https://wiki.eclipse.org/M2E_plugin_execution_not_covered

In alternativa, fai semplicemente clic con il pulsante destro del mouse sul messaggio di errore in Eclipse e scegli Quick Fix-> Ignore for every pom with such errors.

Dovresti fare attenzione quando ignori gli obiettivi del ciclo di vita: in genere gli obiettivi fanno qualcosa di utile e se li configuri per essere ignorati in Eclipse potresti perdere importanti passaggi di costruzione. Potresti anche prendere in considerazione l'aggiunta del supporto all'estensione EAR di Maven Eclipse per l'obiettivo del ciclo di vita non mappato.


0

Con il meccanismo spiegato nella risposta di Jan ho istruito il plug-in m2e a ignorare l'obiettivo "generate-application-xml". Questo elimina l'errore e sembra funzionare poiché m2e crea application.xml.

Quindi, fondamentalmente l'errore ci ha costretti a decidere quale meccanismo è responsabile per la generazione di application.xml quando la build di Maven viene eseguita all'interno di Eclipse sotto il controllo del plugin m2e. E abbiamo deciso che m2e è in carica.

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-ear-plugin</artifactId>
            <version>2.6</version>
            <configuration>
                <version>6</version>
                <defaultLibBundleDir>lib</defaultLibBundleDir>
            </configuration>
        </plugin>
    </plugins>
    <pluginManagement>
        <plugins>
            **<!-- This plugin's configuration is used to store Eclipse m2e settings 
                only. It has no influence on the Maven build itself. -->
            <plugin>
                <groupId>org.eclipse.m2e</groupId>
                <artifactId>lifecycle-mapping</artifactId>
                <version>1.0.0</version>
                <configuration>
                    <lifecycleMappingMetadata>
                        <pluginExecutions>
                            <pluginExecution>
                                <pluginExecutionFilter>
                                    <groupId>org.apache.maven.plugins</groupId>
                                    <artifactId>maven-ear-plugin</artifactId>
                                    <versionRange>[2.1,)</versionRange>
                                    <goals>
                                        <goal>generate-application-xml</goal>
                                    </goals>
                                </pluginExecutionFilter>
                                <action>
                                    <ignore></ignore>
                                </action>
                            </pluginExecution>
                        </pluginExecutions>
                    </lifecycleMappingMetadata>
                </configuration>
            </plugin>**
        </plugins>
    </pluginManagement>
</build>

0

È necessario comprendere il contenuto in M2E_plugin_execution_not_covered e seguire i passaggi indicati di seguito:

  • Seleziona il jar org.eclipse.m2e.lifecyclemapping.defaults dalla cartella del plugin di eclipse
  • Estrailo e apri lifecycle-mapping-metadata.xml dove puoi trovare tutte le pluginExecutions.
  • Aggiungi il plugin Esecuzioni dei tuoi plugin che vengono mostrati come errori con i tag <ignore/>under <action>.

ad esempio: per l'errore write-project-properties, aggiungi questo snippet nella <pluginExecutions>sezione del file lifecycle-mapping-metadata.xml:

 <pluginExecution>
    <pluginExecutionFilter>
       <groupId>org.codehaus.mojo</groupId>
       <artifactId>properties-maven-plugin</artifactId>
       <versionRange>1.0-alpha-2</versionRange>
       <goals>
         <goal>write-project-properties</goal>
       </goals>
    </pluginExecutionFilter>
     <action>
       <ignore />
     </action>
   </pluginExecution>
  • Sostituisci quel file XML nel JAR
  • Sostituisci il JAR aggiornato nella cartella dei plugin di Eclipse
  • Riavvia Eclipse

Non dovresti vedere errori in futuro per nessun progetto.


0

Anche se la domanda è troppo vecchia, ma vorrei condividere la soluzione che ha funzionato per me perché ho già controllato tutto quando si tratta di questo errore. È stato un dolore, ho passato due giorni a provare e alla fine la soluzione è stata:

aggiorna il plugin M2e in eclipse

pulire e ricostruire

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.