Wykonanie wtyczki nie jest objęte konfiguracją cyklu życia (archetyp JBossas 7 EAR)

123

Używam Eclipse 3.7 Indigo z Maven M2E Plugin 1.0.100.

Używając archetypu JBoss 7.x JavaEE 6 EAR, pom dla EAR daje mi ten błąd:

Wykonanie wtyczki nie jest objęte konfiguracją cyklu życia: org.apache.maven.plugins: maven-ear-plugin: 2.6: generowanie-aplikacji-xml (wykonanie: domyślne-generowanie-aplikacji-xml, faza: generowanie-zasobów)

<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
źródło

Odpowiedzi:

138

Jest to „funkcja” wtyczki M2E, która została wprowadzona jakiś czas temu. Nie jest bezpośrednio powiązany z wtyczką JBoss EAR, ale zdarza się również z większością innych wtyczek Maven.

Jeśli masz zdefiniowane wykonanie wtyczki pom(podobnie jak wykonanie maven-ear-plugin:generate-application-xml), musisz również dodać dodatkowe informacje konfiguracyjne dla M2E, które powiedzą M2E, co zrobić, gdy kompilacja jest uruchamiana w Eclipse, np. Czy wykonanie wtyczki powinno zostać zignorowane lub wykonane przez M2E, należy to zrobić również dla kompilacji przyrostowych, ... Jeśli brakuje tej informacji, M2E narzeka na to, wyświetlając następujący komunikat o błędzie:

„Wykonanie wtyczki nie jest objęte konfiguracją cyklu życia”

Zobacz tutaj, aby uzyskać bardziej szczegółowe wyjaśnienie i przykładową konfigurację, którą należy dodać do pom, aby ten błąd zniknął:

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

Jan
źródło
70
@Jan Nie rozumiem koncepcji. M2E powinno być przejrzyste dla użytkownika. Zrób to, co robi Maven z wiersza poleceń, ale z wnętrza zaćmienia. W danych konfiguracyjnych pom nie powinno być informacji, które M2E mają robić. Jeśli tak, to jest to zły projekt. Przy okazji, te błędy czasami znikają w nowszych wersjach Eclipse i M2E.
rapt
8
Zgadzam się z rapt. Mój POM nie jest zależny od m2e i chciałbym dodać je teraz tylko dlatego, że używam Eclipse jako mojego IDE. To jest oszustwo dla innych pracujących nad tym samym projektem, które mogą używać innego IDE, takiego jak IntelliJ. Jeśli m2e potrzebuje tych wskazówek, powinno być częścią konfiguracji m2e w Eclipse.
William
12
Niektóre cele nie mają sensu w Eclipse. Np. Mam projekty, w których pliki ZIP są rozpakowywane do targetfolderu. Nie chciałbyś, aby było to powtarzane „przyrostowo” po zapisaniu każdego pliku źródłowego. A może tego chcesz. Naprawdę m2e nie ma pojęcia o twojej konkretnej wersji. Możesz przechowywać to, co m2e ma zrobić w Eclipse, POM lub ewentualnie zainstalować złącze m2e, które doda więcej wiedzy m2e do obsługi etapu kompilacji. Oto opcje, które powinieneś zobaczyć. Rozumiem, że nie chcesz, aby twój POM m2e był świadomy, ale jest to miłe miejsce do centralnej konfiguracji tego dla wszystkich twoich programistów.
Sander Verhagen
3
Problem polega na tym, że powiązana dokumentacja do tego, jak większość dokumentacji na Maven lub Eclipse. jest abcacadabra. Bez względu na to, jak bardzo starają się to jasno wyjaśnić, wyjaśnienie opiera się na zbyt wielu koncepcjach, których ja jako stosunkowo nowy użytkownik Mavena nie rozumiem i nie wiem, jak sprawdzić - wszystko, co znajdę, ma ten sam problem: zbyt wiele niewyjaśnionych koncepcje. Technologia jest zbyt złożona lub dokumentacja jest zbyt słabo zorganizowana. W każdym razie krzywa uczenia się jest wysoka. Odpowiedzi tutaj dodają dużo jasności.
reinierpost
10
@RicardoGladwell Źle zrozumiałeś cel głosów przeciw. Strzałka mówi „ta odpowiedź jest nieprzydatna” - i to jest nieprawda. Więc nawet jeśli nie podoba ci się ton, w jakim została napisana ta odpowiedź, głos przeciw nie został przyjęty.
Dawood ibn Kareem
43

w każdym razie jest już za późno, ale moim rozwiązaniem było proste kliknięcie prawym przyciskiem myszy na komunikat o błędzie w Eclipse i wybranie Szybka naprawa >> Ignoruj ​​dla każdego pom z takimi błędami

java_newbie
źródło
3
Nie jest za późno. Właśnie w ten sposób rozwiązałem problem!
reinierpost
2
Ja też. Wszystkie te poszukiwania i próba zrozumienia, w czym problem przyprawił mnie o ból głowy, więc zignorowałem to :) Dzięki.
dleerob
1
To zadziałało dla mnie. Podejrzewam, że automatycznie generuje to, co opisano w odpowiedzi @ Jan, która wskazuje na eclipse.org/m2e/documentation/m2e-execution-not-covered.html, ponieważ jedyną zmianą, jaką zobaczyłem po zaakceptowaniu szybkiej poprawki, była zmiana w moim pom. xml.
Michael Osofsky
Próbowałem ponownie na innym komputerze i problem zniknął po aktualizacji z JBehave 3.9.4 do 3.9.5, ponieważ to wtyczka JBehave, w moim przypadku, tworzyła błąd (wygenerowałem konfigurację wtyczki z archetypu JBehave Maven ( jbehave.org/reference/stable/archetypes.html ))
Michael Osofsky
30

Eclipse ma koncepcję kompilacji przyrostowych, co jest niezwykle przydatne, ponieważ pozwala zaoszczędzić dużo czasu.

Jak to jest przydatne

Powiedzmy, że zmieniłeś jeden plik .java. Twórcy przyrostu będą mogli skompilować kod bez konieczności ponownej kompilacji wszystkiego (co zajmie więcej czasu).

Jaki jest problem z wtyczkami Maven

Większość wtyczek maven nie jest przeznaczona do kompilacji przyrostowych i dlatego stwarza problemy dla m2e. m2e nie wie, czy celem wtyczki jest coś kluczowego, czy też nieistotnego. Jeśli po prostu uruchomi każdą wtyczkę, gdy zmieni się pojedynczy plik, zajmie to dużo czasu.

To jest powód, dla którego m2e polega na informacjach z metadanych, aby dowiedzieć się, jak powinno być obsługiwane wykonanie. m2e wymyślił różne opcje dostarczania tych informacji metadanych, a kolejność preferencji jest jak poniżej (od najwyższej do najniższej)

  1. plik pom.xml projektu
  2. rodzic, dziadek i tak dalej pliki pom.xml
  3. Preferencje obszaru roboczego [m2e 1.2+]
  4. zainstalowane rozszerzenia m2e
  5. [m2e 1.1+] metadane mapowania cyklu życia dostarczane przez wtyczkę maven
  6. domyślne metadane mapowania cyklu życia dostarczane z m2e

1,2 odnosi się do określenia sekcji pluginManagement w tagu twojego pliku pom lub któregokolwiek z jego rodziców. M2E odczytuje tę konfigurację, aby skonfigurować projekt. Poniżej fragment kodu instruuje m2e, aby ignorował cele jslinti compresswtyczki 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) Jeśli nie chcesz zanieczyszczać swojego pliku pom tymi metadanymi, możesz zapisać je w zewnętrznym pliku XML (opcja 3). Poniżej znajduje się przykładowy plik mapowania, który instruuje m2e, aby ignorował cele jslinti compresswtyczki 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) Jeśli nie podoba ci się żadna z tych 3 opcji, możesz użyć złącza m2e (rozszerzenia) dla wtyczki maven, które z kolei dostarczy metadane do m2e. Możesz zobaczyć przykład informacji metadanych w łączniku pod tym linkiem . Być może zauważyłeś, że metadane odnoszą się do konfiguratora. Oznacza to po prostu, że m2e przeleje odpowiedzialność na tę konkretną klasę java dostarczoną przez autora rozszerzenia. Konfigurator może skonfigurować projekt (np. Dodać dodatkowe foldery źródłowe itp.) I zdecydować, czy wykonać właściwą wtyczkę maven podczas kompilacji przyrostowej (jeśli nieprawidłowo zarządzany w konfiguratorze, może prowadzić do niekończących się kompilacji projektów)

Skorzystaj z tych łączy, aby zapoznać się z przykładem konfiguracji ( łącze1 , łącze2 ). Jeśli więc wtyczka jest czymś, czym można zarządzać za pomocą zewnętrznego złącza, możesz ją zainstalować. m2e utrzymuje listę takich łączników dostarczoną przez innych programistów, znaną jako katalog wykrywania. m2e wyświetli monit o zainstalowanie łącznika, jeśli nie masz jeszcze żadnych metadanych mapowania cyklu życia do wykonania za pomocą dowolnej z opcji (1-6), a katalog wykrywania ma rozszerzenie, które może zarządzać wykonaniem.

Poniższy obraz pokazuje, jak m2e monituje o zainstalowanie łącznika dla wtyczki build-helper-maven-plugin. zainstaluj łącznik sugerowany z katalogu wykrywania.

5) m2e zachęca autorów wtyczek do obsługi przyrostowej kompilacji i mapowania cyklu życia dostaw w samej wtyczce maven, co oznaczałoby, że użytkownicy nie będą musieli używać żadnych dodatkowych mapowań cyklu życia ani łączników. Niektórzy autorzy wtyczek już to zaimplementowali

6) Domyślnie m2e przechowuje metadane mapowania cyklu życia dla większości powszechnie używanych wtyczek, takich jak maven-compiler-plugin i wiele innych.

Wróćmy teraz do pytania: prawdopodobnie możesz po prostu podać mapowanie cyklu życia zignorowania w 1, 2 lub 3 dla tego konkretnego celu, który sprawia ci kłopoty.

coderplus
źródło
14

Dobrym obejściem, aby przypomnieć, że m2e można lepiej skonfigurować bez dziedziczenia przez projekt znacznika błędu fałszywie dodatniego, jest po prostu obniżenie tych błędów do ostrzeżeń:

Okno -> Preferencje -> Maven -> Błędy / ostrzeżenia -> Wykonanie wtyczki nie jest objęte konfiguracją cyklu życia = Ostrzeżenie

mgobeil
źródło
12

Próbowałem wykonać określone podłączanie zaraz po czyszczeniu, tj. Po czyszczeniu (domyślnie jest to czysta faza). To zadziałało dla mnie z eclipse indigo. Właśnie dodane po czyszczeniu rozwiązało problem.

<executions>
  <execution>
    <configuration>
    </configuration>
   <phase>post-clean</phase>
    <goals>
      <goal>update-widgetset</goal>
    </goals>
  </execution>
</executions> 
Charith De Silva
źródło
11
Czy możesz wyjaśnić, dlaczego to działa? „Właśnie dodane” i „rozwiązane dla mnie” tak naprawdę nie zwiększa mojego zaufania do tego, że nie ma niepożądanych, ukrytych zachowań.
Kissaki
Oczywiście mam a phasei a goaldla the executionw pom.xml, który został mi podany, i nadal otrzymuję błąd.
reinierpost
Panowie - przepraszam. Nie jestem ekspertem od mistrzów, chciałem pomóc komuś w poszukiwaniu szybkiego rozwiązania. Powinienem jednak dać więcej wglądu. Myślę, że sztuczka polega na włączeniu fazy wykonania. Ponieważ mojo można definiować za pomocą faz wykonywania, próbowałem wykonać określone podłączanie zaraz po czyszczeniu, tj. Po czyszczeniu (domyślnie jest to czysta faza). To zadziałało dla mnie z eclipse indigo. Prawdopodobnie konkretna wtyczka mogła używać zależności z głównego pom? IIRC była to wtyczka oparta na Vaadin.
Charith De Silva
2

Udało mi się rozwiązać ten sam problem z maven-antrun-plugin i jaxb2-maven-plugin w Eclipse Kepler 4.3, aplikując to rozwiązanie: http://wiki.eclipse.org/M2E_plugin_execution_not_covered#Eclipse_4.2_add_default_mapping
Więc zawartość mojego% elipse_workspace_name% /. metadata / .plugins / org.eclipse.m2e.core / lifecycle-mapping-metadata.xml wygląda następująco:

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

* Musiałem ponownie uruchomić Eclipse, aby zobaczyć, że błędy zniknęły.

Eros
źródło
1

Od wersji 0.12 Maven Eclipse (m2e) wszystkie cele cyklu życia Maven muszą być odwzorowane na zainstalowane rozszerzenie m2e. W tym przypadku maven-ear-pluginmiał niezamapowany cel default-generate-application-xml.

Możesz wykluczyć niemapowane cele cyklu życia, postępując zgodnie z instrukcjami tutaj:

https://wiki.eclipse.org/M2E_plugin_execution_not_covered

Alternatywnie, po prostu kliknij prawym przyciskiem myszy komunikat o błędzie w Eclipse i wybierz Quick Fix-> Ignore for every pom with such errors.

Należy zachować ostrożność, ignorując cele cyklu życia: zazwyczaj cele są przydatne, a jeśli skonfigurujesz je tak, aby były ignorowane w Eclipse, możesz przegapić ważne kroki kompilacji. Możesz również rozważyć dodanie obsługi rozszerzenia Maven Eclipse EAR dla niezamapowanego celu cyklu życia.

Ricardo Gladwell
źródło
0

Za pomocą mechanizmu wyjaśnionego w odpowiedzi Jana poinstruowałem wtyczkę m2e, aby ignorowała cel „generuj-aplikację-xml”. To usuwa błąd i wydaje się działać, ponieważ m2e tworzy plik application.xml.

Zasadniczo błąd zmusił nas do podjęcia decyzji, który mechanizm odpowiada za generowanie pliku application.xml, gdy kompilacja Mavena działa wewnątrz Eclipse pod kontrolą wtyczki m2e. Zdecydowaliśmy, że rządzi m2e.

<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
źródło
0

Musisz zrozumieć zawartość M2E_plugin_execution_not_covered i postępować zgodnie z poniższymi krokami:

  • Wybierz słoik org.eclipse.m2e.lifecyclemapping.defaults z folderu wtyczek eclipse
  • Wyodrębnij go i otwórz lifecycle-mapping-metadata.xml, w którym znajdziesz wszystkie pluginExecutions.
  • Dodaj pluginExecutions swoich wtyczek, które są wyświetlane jako błędy z tagami <ignore/>under <action>.

np. w przypadku błędu write-project-properties dodaj ten fragment w <pluginExecutions>sekcji pliku 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>
  • Zastąp ten plik XML w JAR
  • Zastąp zaktualizowany plik JAR w folderze wtyczek Eclipse
  • Uruchom ponownie Eclipse

W przyszłości nie powinieneś widzieć żadnych błędów dla żadnego projektu.

gowtham
źródło
0

Wprawdzie pytanie jest zbyt stare, ale chciałbym się podzielić rozwiązaniem, które u mnie zadziałało bo sprawdziłem już wszystko co do tego błędu. To był ból, spędziłem dwa dni próbując i na koniec rozwiązanie było:

zaktualizuj wtyczkę M2e w eclipse

wyczyść i zbuduj ponownie

William Kinaan
źródło