Виконання плагіна, не охоплене конфігурацією життєвого циклу (архетип JBossas 7 EAR)


123

Я використовую Eclipse 3.7 Indigo з Maven M2E Plugin 1.0.100.

Використовуючи JBoss 7.x JavaEE 6 EAR архетип, пом для EAR видає мені цю помилку:

Виконання плагіна, не охоплене конфігурацією життєвого циклу: org.apache.maven.plugins: maven-ear-plugin: 2.6: create-application-xml (виконання: default-generated-application-xml, фаза: create-ресурси)

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

Відповіді:


138

Це "особливість" плагіна M2E, який був представлений деякий час тому. Це не пов’язано безпосередньо з плагіном JBoss EAR, але трапляється і з більшістю інших плагінів Maven.

Якщо у вас визначено виконання плагіну pom(як виконання maven-ear-plugin:generate-application-xml), вам також потрібно додати додаткову інформацію конфігурації для M2E, яка повідомляє M2E, що робити, коли збірка запускається в Eclipse, наприклад, якщо виконання плагіна буде проігноровано чи виконано M2E, чи слід це робити і для поступових збірок, ... Якщо цієї інформації немає, M2E скаржиться на неї, показуючи це повідомлення про помилку:

"Виконання плагіна, не охоплене конфігурацією життєвого циклу"

Дивіться тут для більш детального пояснення та деякого зразка конфігурації, яку потрібно додати до пам’яті, щоб усунути цю помилку:

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


70
@Jan Я не розумію концепції. M2E повинен бути прозорим для користувача. Робіть те, що робить командний рядок Maven, але зсередини затемнення. У pom-config даних не повинно бути даних, щоб сказати M2E, що робити. Якщо це так, то це погана конструкція. До речі, ці помилки іноді відсутні в нових версіях Eclipse та M2E.
rapt

8
Я згоден з раптом. Мій POM не має залежності від m2e, і я хотів би додати його зараз лише тому, що я випадково використовую Eclipse як мій IDE. Це неможливо для інших, що працюють над тим самим проектом, які цілком можуть використовувати інший IDE, такий як IntelliJ. Якщо m2e потрібні ці підказки, то він повинен бути частиною конфігурації m2e в межах Eclipse.
Вільям

12
Деякі цілі не мають сенсу, перебуваючи у затемненні. Наприклад, у мене є проекти, де ZIP-файли розпаковуються до targetпапки. Ви не хочете, щоб це було зроблено "поступово" після збереження кожного вихідного файлу. А може, ви цього хочете. Дійсно, m2e не має уявлення про вашу конкретну збірку. Ви можете зберігати, що m2e має робити в Eclipse, POM, або, можливо, встановити роз'єм m2e, який додає більше знань m2e для обробки кроку збирання. Це варіанти, які ви повинні бачити. Я розумію, ви не хочете, щоб ваш POM m2e обізнаний, але це приємне місце для централізованого налаштування цього для всіх ваших розробників.
Сандер Верхаген

3
Проблема полягає в тому, що пов'язана документація для цього, як і більшість документації на Maven або Eclipse. є абкакадабра. Як би важко вони не намагалися пояснити це чітко, пояснення спирається на занадто багато понять, які я як відносно новий користувач Maven не розумію і не знаю, як шукати - все, що я знаходжу, має ту саму проблему: занадто багато незрозумілих понять. Технологія занадто складна або документація занадто погано організована. У будь-якому випадку крива навчання висока. Відповіді тут додають великої чіткості.
reinierpost

10
@RicardoGladwell Ви неправильно зрозуміли мету трансляції. Стрілка говорить "ця відповідь не корисна" - і це неправда цієї відповіді. Тож незважаючи на те, що вам не подобається тон, яким написано цю відповідь, голосовання не вимагається.
Dawood ibn Kareem

43

у будь-якому випадку вже пізно, але моє рішення було простою клацанням правою кнопкою миші на повідомленні про помилку в Eclipse та вибором Швидкого виправлення >> Ігнорувати кожен пом із такими помилками


3
Ще не пізно. Я просто вирішив проблему таким чином!
reinierpost

2
Я також. Все це дослідження та намагання зрозуміти, у чому проблема, викликали головний біль, тому я її проігнорував :) Дякую.
делероб

1
Це працювало для мене. Я підозрюю, що це автоматично генерує те, що описано у відповіді @ Яна, яка вказує на eclipse.org/m2e/documentation/m2e-execution-not-covered.html, оскільки єдиною зміною, яку я побачив після прийняття швидкого виправлення, було зміна моєї пом. xml
Михайло Ософський

Я спробував ще раз на іншій машині, і проблема зникла, коли я модернізував з JBehave 3.9.4 до 3.9.5, оскільки саме плагін JBehave, в моєму випадку, створював помилку (я створив конфігурацію плагіна з архетипу JBehave Maven ( jbehave.org/reference/stable/archetypes.html ))
Михайло Ософський

30

Eclipse отримав концепцію поступового нарощування. Це неймовірно корисно, оскільки це економить багато часу.

Чим це корисно

Скажімо, ви щойно змінили один .java-файл. Поступові будівельники зможуть скласти код, не вимагаючи перекомпілювати все (на що піде більше часу).

Тепер у чому проблема з Maven Plugins

Більшість плагінів Maven не розраховані на інкрементні нарощування, а значить, це створює проблеми для m2e. m2e не знає, чи є ціль плагіна важливою, чи вона не має значення. Якщо він просто виконує кожен плагін, коли змінюється один файл, це займе багато часу.

З цієї причини m2e покладається на інформацію метаданих, щоб визначити, як слід керувати виконанням. m2e запропонував різні варіанти надання цієї інформації метаданих, і порядок уподобань наведено нижче (найвищий до найнижчого)

  1. файл проекту pom.xml
  2. батьківські, прабатьківські тощо, файли pom.xml
  3. [m2e 1.2+] налаштування робочої області
  4. встановлені розширення m2e
  5. [m2e 1.1+] метадані відображення життєвого циклу, надані плагіном Maven
  6. Метадані для відображення життєвого циклу за замовчуванням поставляються з m2e

1,2 стосується вказівки розділу pluginManagement у тезі вашого pom-файлу чи будь-якого з батьків. M2E читає цю конфігурацію для налаштування проекту. Нижче фрагмент дає команду m2e ігнорувати jslintта compressцілі yuicompressor-maven-plugin

<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) Якщо ви не хочете забруднювати ваш Pom-файл цими метаданими, ви можете зберігати його у зовнішньому XML-файлі (опція 3). Нижче наведено зразок файлу відображення, який вказує m2e ігнорувати jslintта compressцілі плагін yuicompressor-maven-plugin

<?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) Якщо вам не сподобається жоден із цих 3 варіантів, ви можете використовувати роз'єм m2e (розширення) для плагіну Maven. З'єднувач, у свою чергу, надасть метадані m2e. Ви можете побачити приклад інформації про метадані в роз'ємі за цим посиланням . Можливо, ви помітили, що метадані стосуються конфігуратора. Це просто означає, що m2e делегує відповідальність саме тому класу java, наданому автором розширення. Конфігуратор може налаштувати проект (наприклад, додати додаткові папки джерела тощо) та вирішити, чи виконувати фактичний плагін Maven під час інкрементальної збірки (якщо якщо не належним чином керувати в конфігураторі, це може призвести до нескінченних складання проектів)

Див ці посилання для прикладу configuratior ( link1 , link2 ). Тож у випадку, якщо плагіном є щось, чим можна керувати через зовнішній роз'єм, тоді ви можете встановити його. m2e підтримує список таких роз'ємів, внесених іншими розробниками. Це відоме як каталог відкриття. m2e запропонує встановити з'єднувач, якщо ви ще не маєте метаданих зіставлення життєвого циклу для виконання через будь-який із параметрів (1-6), а каталог виявлення має деяке розширення, яке може керувати виконанням.

На зображенні нижче показано, як m2e вимагає встановити з'єднувач для плагіну build-helper-maven. встановити з'єднувач, запропонований з каталогу виявлення.

5) m2e заохочує авторів плагінів підтримувати інкрементальне складання та постачання життєвого циклу в межах самого Maven-плагіна. Це означатиме, що користувачам не доведеться використовувати будь-які додаткові відображення життєвого циклу чи роз'єми. Деякі автори плагінів уже реалізували це

6) За замовчуванням m2e містить метадані відображення життєвого циклу для більшості часто використовуваних плагінів, таких як maven-компілятор-плагін та багато інших.

Тепер повернемося до питання: Ви, ймовірно, можете просто надати ігнорування відображення життєвого циклу в 1, 2 або 3 для тієї конкретної мети, яка створює проблеми для вас.


14

Хороший спосіб нагадати, що m2e можна було б краще налаштувати, без того, щоб проект успадкував помилковий позитивний маркер помилки, - це просто зменшити ці помилки до попереджень:

Вікно -> Налаштування -> Maven -> Помилки / попередження -> Виконання плагіну не охоплено конфігурацією життєвого циклу = Попередження


12

Я намагався виконати конкретне підключення відразу після очищення, тобто після очищення (за замовчуванням - фаза очищення). Це працювало для мене із затемненням індиго. Щойно додане після очищення вирішило проблему для мене.

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

11
Чи можете ви пояснити, чому це працює? «Щойно доданий» та «вирішений для мене» насправді не збільшує мою довіру до нього, не маючи небажаного прихованого поведінки.
Кіссакі

Зрозуміло, у мене є phaseі а goalдля executionв pom.xml, який мені було надано, і я все одно отримую помилку.
reinierpost

Пани - мої вибачення. Я не фахівець з мешканців, хотів допомогти some1, що шукає швидкого рішення. Мені варто було б більше зрозуміти. Я думаю, що фокус тут полягає у включенні фази виконання. Оскільки mojo можна визначити за допомогою фаз виконання, я спробував виконати конкретне підключення відразу після очищення, тобто після очищення (за замовчуванням - фаза очищення). Це працювало для мене із затемненням індиго. Можливо, конкретний плагін, можливо, використовував деякі залежності від основного пом? IIRC це був плагін на основі Ваадіна.
Charith De Silva

2

Мені вдалося вирішити ту саму проблему з maven-antrun-plugin та jaxb2-maven-plugin у Eclipse Kepler 4.3, застосувавши це рішення: http://wiki.eclipse.org/M2E_plugin_execution_not_covered#Eclipse_4.2_add_default_mapping
Отже, вміст мого% elipse_workspace_name% /. metadata / .plugins / org.eclipse.m2e.core / mapcycle-mapping-metadata.xml є таким:

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

* Довелося перезапустити Eclipse, щоб побачити помилки.


1

Починаючи з версії Maven Eclipse (m2e) 0,12, всі цілі життєвого циклу Maven повинні відповідати встановленому розширенню m2e. У цьому випадку у maven-ear-pluginнього була незареєстрована мета default-generate-application-xml.

Ви можете виключити неоточені цілі життєвого циклу, просто дотримуючись інструкцій тут:

https://wiki.eclipse.org/M2E_plugin_execution_not_covered

Крім того, просто клацніть правою кнопкою миші повідомлення про помилку в Eclipse та виберіть Quick Fix-> Ignore for every pom with such errors.

Ви повинні бути обережними, ігноруючи цілі життєвого циклу: зазвичай цілі роблять щось корисне, і якщо ви налаштовуєте їх на ігнорування в Eclipse, ви можете пропустити важливі кроки побудови. Ви також можете розглянути можливість додавання підтримки до розширення EAR Maven Eclipse EAR для нерозробленої цілі життєвого циклу.


0

За допомогою механізму, поясненого у відповіді Яна, я доручив плагіні m2e ігнорувати мету "create-application-xml". Це позбавляється від помилки і, здається, працює, оскільки m2e створює application.xml.

Тому в основному помилка змусила нас вирішити, який механізм відповідає за генерування application.xml, коли збірка Maven працює всередині Eclipse під контролем плагіна m2e. І ми вирішили, що 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>

0

Вам потрібно зрозуміти вміст у M2E_plugin_execution_not_covered та виконувати вказані нижче дії:

  • Підберіть папку org.eclipse.m2e.lifecyclemapping.defaults з папки плагінів eclipse
  • Витягніть його та відкрийте картографічне відображення життєвого циклу-metadata.xml, де ви можете знайти всі плагіни виконання.
  • Додайте pluginExecutions своїх плагінів, які відображаються як помилки <ignore/>під <action>тегами.

наприклад: для помилки властивостей write-project додайте цей фрагмент у <pluginExecutions>розділ файлу 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>
  • Замініть цей XML-файл у JAR
  • Замініть оновлений JAR у папці плагінів Eclipse
  • Перезапустіть затемнення

Ви не повинні бачити жодних помилок у майбутньому для будь-якого проекту.


0

Хоча питання занадто старе, але я хотів би поділитися рішенням, яке працювало на мене, тому що я вже перевірив усе, що стосується цієї помилки. Це був біль, я два дні намагався пробувати, і наприкінці рішення було:

оновіть плагін M2e в затемненні

чистити і будувати заново

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.