Plugin-Ausführung, die nicht durch die Lebenszykluskonfiguration abgedeckt ist (JBossas 7 EAR-Archetyp)

123

Ich verwende Eclipse 3.7 Indigo mit dem Maven M2E Plugin 1.0.100.

Bei Verwendung des JBoss 7.x JavaEE 6 EAR-Archetyps gibt mir der POM für EAR den folgenden Fehler:

Plugin-Ausführung, die nicht von der Lebenszykluskonfiguration abgedeckt wird: org.apache.maven.plugins: maven-ear-plugin: 2.6: generiere-anwendungs-xml (Ausführung: Standard-generiere-anwendungs-xml, Phase: generiere Ressourcen)

<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>
Oh Chin Boon
quelle

Antworten:

138

Dies ist eine "Funktion" des M2E-Plugins, das vor einiger Zeit eingeführt wurde. Es hängt nicht direkt mit dem JBoss EAR-Plugin zusammen, sondern auch mit den meisten anderen Maven-Plugins.

Wenn Sie eine Plugin-Ausführung in Ihrem definiert haben pom(wie die Ausführung von maven-ear-plugin:generate-application-xml), müssen Sie auch zusätzliche Konfigurationsinformationen für M2E hinzufügen, die M2E mitteilen, was zu tun ist, wenn der Build in Eclipse ausgeführt wird, z. B. sollte die Plugin-Ausführung von ignoriert oder ausgeführt werden M2E, sollte dies auch für inkrementelle Builds durchgeführt werden, ... Wenn diese Informationen fehlen, beschwert sich M2E darüber, indem folgende Fehlermeldung angezeigt wird:

"Plugin-Ausführung wird nicht durch die Lebenszykluskonfiguration abgedeckt"

Hier finden Sie eine detailliertere Erklärung und einige Beispielkonfigurationen, die dem POM hinzugefügt werden müssen, damit dieser Fehler behoben wird:

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

Jan.
quelle
70
@ Jan Ich verstehe das Konzept nicht. M2E sollte für den Benutzer transparent sein. Tun Sie, was die Befehlszeile von Maven tut, aber innerhalb von Eclipse. In den pom-Konfigurationsdaten sollten keine Daten enthalten sein, die M2E mitteilen, was zu tun ist. Wenn ja, dann ist es ein schlechtes Design. Übrigens sind diese Fehler in neueren Versionen von Eclipse und M2E manchmal verschwunden.
Rapt
8
Ich stimme Rapt zu. Mein POM hat keine Abhängigkeit von m2e und ich möchte jetzt eine hinzufügen, nur weil ich zufällig Eclipse als meine IDE verwende. Dies ist ein Betrug für andere, die an demselben Projekt arbeiten und möglicherweise eine andere IDE wie IntelliJ verwenden. Wenn m2e diese Hinweise benötigt, sollte es Teil der m2e-Konfiguration in Eclipse sein.
William
12
Einige Ziele sind in Eclipse nicht sinnvoll. Ich habe beispielsweise Projekte, bei denen ZIP-Dateien in den targetOrdner entpackt werden . Sie möchten nicht, dass dies beim Speichern jeder Quelldatei "inkrementell" wiederholt wird. Oder vielleicht willst du das. Wirklich, m2e hat keine Ahnung von Ihrem spezifischen Build. Sie können speichern, was m2e in Eclipse, POM tun soll, oder möglicherweise einen m2e-Connector installieren, der m2e mehr Wissen für den Build-Schritt hinzufügt. Dies sind die Optionen, die Sie sehen sollten. Ich verstehe, dass Sie Ihr POM m2e nicht bewusst machen möchten, aber es ist ein guter Ort, um dies zentral für alle Ihre Entwickler zu konfigurieren.
Sander Verhagen
3
Das Problem ist, dass die verknüpfte Dokumentation dazu, wie die meisten Dokumentationen zu Maven oder Eclipse. ist abcacadabra. Egal wie sehr sie versuchen, es klar zu erklären, die Erklärung beruht auf zu vielen Konzepten, die ich als relativ neuer Maven-Benutzer nicht verstehe und nicht nachschlagen kann - alles, was ich finde, hat das gleiche Problem: zu viele ungeklärte Konzepte. Die Technologie ist zu komplex oder die Dokumentation zu schlecht organisiert. In jedem Fall ist die Lernkurve hoch. Die Antworten hier sorgen für viel Klarheit.
Reinierpost
10
@ RicardoGladwell Sie haben den Zweck von Abstimmungen falsch verstanden. Der Pfeil sagt "diese Antwort ist nicht nützlich" - und das ist falsch von dieser Antwort. Obwohl Sie den Ton, mit dem diese Antwort geschrieben wird, nicht mögen, war die Abwertung unangebracht.
Dawood ibn Kareem
43

Trotzdem ist es zu spät, aber meine Lösung bestand darin, einfach mit der rechten Maustaste auf die Fehlermeldung in Eclipse zu klicken und für jeden POM mit solchen Fehlern Schnellkorrektur >> Ignorieren zu wählen

java_newbie
quelle
3
Es ist nicht zu spät. Ich habe das Problem einfach so behoben!
Reinierpost
2
Ich auch. All diese Nachforschungen und der Versuch zu verstehen, was das Problem war, bereiteten mir Kopfschmerzen, also ignorierte ich es :) Danke.
Dleerob
1
Das hat bei mir funktioniert. Ich vermute, es generiert automatisch das, was in der Antwort von @ Jan beschrieben ist und auf eclipse.org/m2e/documentation/m2e-execution-not-covered.html verweist, da die einzige Änderung, die ich sah, nachdem ich die Schnellkorrektur akzeptiert hatte, eine Änderung an meinem Pom war. xml.
Michael Osofsky
Ich habe es erneut auf einem anderen Computer versucht und das Problem ist verschwunden, als ich ein Upgrade von JBehave 3.9.4 auf 3.9.5 durchgeführt habe, da in meinem Fall das JBehave-Plugin den Fehler verursachte (ich hatte die Plugin-Konfiguration aus einem JBehave Maven-Archetyp generiert ( jbehave.org/reference/stable/archetypes.html ))
Michael Osofsky
30

Eclipse hat das Konzept der inkrementellen Builds. Dies ist unglaublich nützlich, da es viel Zeit spart.

Wie ist das nützlich?

Angenommen, Sie haben gerade eine einzelne Java-Datei geändert. Die inkrementellen Builder können den Code kompilieren, ohne alles neu kompilieren zu müssen (was mehr Zeit in Anspruch nimmt).

Was ist nun das Problem mit Maven Plugins?

Die meisten Maven-Plugins sind nicht für inkrementelle Builds konzipiert und verursachen daher Probleme für m2e. m2e weiß nicht, ob das Plugin-Ziel entscheidend ist oder ob es irrelevant ist. Wenn nur jedes Plugin ausgeführt wird, wenn sich eine einzelne Datei ändert, wird es viel Zeit in Anspruch nehmen.

Aus diesem Grund stützt sich m2e auf Metadateninformationen, um herauszufinden, wie die Ausführung behandelt werden soll. m2e hat verschiedene Optionen für die Bereitstellung dieser Metadateninformationen entwickelt. Die Reihenfolge der Einstellungen ist wie folgt (höchste bis niedrigste).

  1. pom.xml Datei des Projekts
  2. Eltern-, Großeltern- und so weiter pom.xml-Dateien
  3. [m2e 1.2+] Arbeitsbereichseinstellungen
  4. installierte m2e-Erweiterungen
  5. [m2e 1.1+] Lebenszyklus-Mapping-Metadaten, die vom Maven-Plugin bereitgestellt werden
  6. Standard-Metadaten für die Lebenszykluszuordnung, die mit m2e geliefert werden

1,2 bezieht sich auf die Angabe des Abschnitts pluginManagement im Tag Ihrer POM-Datei oder eines ihrer Eltern. M2E liest diese Konfiguration, um das Projekt zu konfigurieren. Das folgende Snippet weist m2e an, die jslintund compressZiele des yuicompressor-maven-Plugins zu ignorieren

<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) Falls Sie es nicht vorziehen, Ihre POM-Datei mit diesen Metadaten zu verschmutzen, können Sie diese in einer externen XML-Datei speichern (Option 3). Unten finden Sie eine Beispiel-Mapping-Datei, die m2e anweist, die jslintund compressZiele des yuicompressor-maven-Plugins zu ignorieren

<?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) Falls Ihnen eine dieser 3 Optionen nicht gefällt, können Sie einen m2e-Connector (Erweiterung) für das Maven-Plugin verwenden. Der Connector stellt wiederum die Metadaten für m2e bereit. Unter diesem Link sehen Sie ein Beispiel für die Metadateninformationen in einem Connector . Möglicherweise haben Sie bemerkt, dass sich die Metadaten auf einen Konfigurator beziehen. Dies bedeutet einfach, dass m2e die Verantwortung an diese bestimmte Java-Klasse delegiert, die vom Erweiterungsautor bereitgestellt wird. Der Konfigurator kann das Projekt konfigurieren (z. B. zusätzliche Quellordner hinzufügen usw.) und entscheiden, ob das eigentliche Maven-Plugin während eines inkrementellen Builds ausgeführt werden soll (falls) Wird der Konfigurator nicht ordnungsgemäß verwaltet, kann dies zu endlosen Projektbuilds führen.

Unter diesen Links finden Sie ein Beispiel für die Konfiguration ( Link1 , Link2 ). Wenn das Plugin also über einen externen Anschluss verwaltet werden kann, können Sie es installieren. m2e führt eine Liste solcher Konnektoren, die von anderen Entwicklern bereitgestellt wurden. Dies wird als Erkennungskatalog bezeichnet. m2e fordert Sie auf, einen Connector zu installieren, wenn Sie noch keine Metadaten für die Lebenszykluszuordnung für die Ausführung über eine der Optionen (1-6) haben und der Erkennungskatalog über eine Erweiterung verfügt, mit der die Ausführung verwaltet werden kann.

Das folgende Bild zeigt, wie m2e Sie auffordert, den Connector für das Build-Helper-Maven-Plugin zu installieren. Installieren Sie den aus dem Discovery-Katalog vorgeschlagenen Connector.

5) m2e ermutigt die Plugin-Autoren, die inkrementelle Erstellung und Bereitstellung von Lifecycle-Mappings innerhalb des Maven-Plugins selbst zu unterstützen. Dies würde bedeuten, dass Benutzer keine zusätzlichen Lifecycle-Mappings oder Connectors verwenden müssen. Einige Plugin-Autoren haben dies bereits implementiert

6) Standardmäßig enthält m2e die Metadaten für die Lebenszykluszuordnung für die meisten häufig verwendeten Plugins wie das Maven-Compiler-Plugin und viele andere.

Zurück zur Frage: Sie können wahrscheinlich einfach eine Ignorier-Lebenszykluszuordnung in 1, 2 oder 3 für das spezifische Ziel bereitstellen, das Ihnen Probleme bereitet.

coderplus
quelle
14

Eine gute Problemumgehung, um Sie daran zu erinnern, dass m2e besser konfiguriert werden könnte, ohne dass das Projekt eine falsch positive Fehlermarkierung erbt, besteht darin, diese Fehler einfach auf Warnungen herunterzustufen:

Fenster -> Einstellungen -> Maven -> Fehler / Warnungen -> Plugin-Ausführung, die nicht von der Lebenszykluskonfiguration abgedeckt wird = Warnung

mgobeil
quelle
12

Ich habe versucht, direkt nach der Bereinigung, dh nach der Bereinigung, ein bestimmtes Einstecken durchzuführen (Standard ist die Bereinigungsphase). Dies funktionierte bei mir mit Eclipse Indigo. Gerade nach dem Reinigen hinzugefügt, löste das Problem für mich.

<executions>
  <execution>
    <configuration>
    </configuration>
   <phase>post-clean</phase>
    <goals>
      <goal>update-widgetset</goal>
    </goals>
  </execution>
</executions> 
Charith De Silva
quelle
11
Können Sie erklären, warum das funktioniert? "Nur hinzugefügt" und "für mich gelöst" erhöht nicht wirklich mein Vertrauen in unerwünschte versteckte Verhaltensweisen.
Kissaki
Sicher genug, ich habe ein phaseund ein goalfür die executionin der pom.xml, die mir gegeben wurde, und ich bekomme immer noch den Fehler.
Reinierpost
Herren - ich entschuldige mich. Ich bin kein Maven-Experte und wollte jemandem helfen, der nach einer schnellen Lösung sucht. Ich hätte allerdings mehr Einblick geben sollen. Ich denke, der Trick hier ist die Einbeziehung der Ausführungsphase. Da mojo mit Ausführungsphasen definieren kann, habe ich versucht, direkt nach der Bereinigung, dh nach der Bereinigung, ein bestimmtes Plugging auszuführen (Standard ist die Bereinigungsphase). Dies funktionierte bei mir mit Eclipse Indigo. Wahrscheinlich hat ein bestimmtes Plugin einige Abhängigkeiten vom Haupt-POM verwendet? IIRC Dies war ein Vaadin-basiertes Plugin.
Charith De Silva
2

Ich konnte das gleiche Problem mit dem Maven-Antrun-Plugin und dem Jaxb2-Maven-Plugin in Eclipse Kepler 4.3 lösen, indem ich diese Lösung anwendete: http://wiki.eclipse.org/M2E_plugin_execution_not_covered#Eclipse_4.2_add_default_mapping
Also den Inhalt meines% elipse_workspace_name% /. metadata / .plugins / org.eclipse.m2e.core / lifecycle-Mapping-Metadata.xml lautet wie folgt:

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

* Musste Eclipse neu starten, um zu sehen, dass die Fehler verschwunden sind.

Eros
quelle
1

Ab Maven Eclipse (m2e) Version 0.12 müssen alle Maven-Lebenszyklusziele einer installierten m2e-Erweiterung zugeordnet werden. In diesem Fall hatte der maven-ear-pluginein nicht zugeordnetes Ziel default-generate-application-xml.

Sie können nicht zugeordnete Lebenszyklusziele ausschließen, indem Sie einfach die folgenden Anweisungen befolgen:

https://wiki.eclipse.org/M2E_plugin_execution_not_covered

Alternativ klicken Sie einfach mit der rechten Maustaste auf die Fehlermeldung in Eclipse und wählen Sie Quick Fix-> Ignore for every pom with such errors.

Sie sollten vorsichtig sein, wenn Sie Lebenszyklusziele ignorieren: In der Regel tun Ziele etwas Nützliches, und wenn Sie sie so konfigurieren, dass sie in Eclipse ignoriert werden, verpassen Sie möglicherweise wichtige Erstellungsschritte. Möglicherweise möchten Sie auch die EAR-Erweiterung von Maven Eclipse für das nicht zugeordnete Lebenszyklusziel unterstützen.

Ricardo Gladwell
quelle
0

Mit dem in der Antwort von Jan erläuterten Mechanismus habe ich das m2e-Pluging angewiesen, das Ziel "generate-application-xml" zu ignorieren. Dies beseitigt den Fehler und scheint zu funktionieren, da m2e application.xml erstellt.

Der Fehler hat uns also gezwungen zu entscheiden, welcher Mechanismus für die Generierung von application.xml zuständig ist, wenn der Maven-Build in Eclipse unter der Kontrolle des m2e-Plugins ausgeführt wird. Und wir haben entschieden, dass m2e verantwortlich ist.

<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>
StaticNoiseLog
quelle
0

Sie müssen den Inhalt von M2E_plugin_execution_not_covered verstehen und die folgenden Schritte ausführen :

  • Wählen Sie org.eclipse.m2e.lifecyclemapping.defaults jar aus dem Ordner des Eclipse-Plugins
  • Extrahieren Sie es und öffnen Sie die Lifecycle-Mapping-Metadata.xml, in der Sie alle PluginExecutions finden.
  • Fügen Sie die pluginExecutions Ihrer Plugins hinzu, die als Fehler mit <ignore/>unter <action>Tags angezeigt werden .

Beispiel: Fügen Sie bei einem Fehler beim Schreiben von Projekteigenschaften dieses Snippet unter dem <pluginExecutions>Abschnitt der Datei lifecycle-Mapping-Metadata.xml hinzu:

 <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>
  • Ersetzen Sie diese XML-Datei in der JAR
  • Ersetzen Sie die aktualisierte JAR im Plugin-Ordner von Eclipse
  • Starten Sie Eclipse neu

Sie sollten in Zukunft keine Fehler für ein Projekt sehen.

Gowtham
quelle
0

Obwohl die Frage zu alt ist, möchte ich die Lösung teilen, die für mich funktioniert hat, da ich bereits alles überprüft habe, wenn es um diesen Fehler geht. Es war ein Schmerz, ich habe zwei Tage lang versucht und am Ende war die Lösung:

Aktualisieren Sie das M2e-Plugin in Eclipse

reinigen und wieder aufbauen

William Kinaan
quelle