Выполнение плагина не охвачено конфигурацией жизненного цикла (архетип JBossas 7 EAR)

123

Я использую Eclipse 3.7 Indigo с Maven M2E Plugin 1.0.100.

Используя архетип JBoss 7.x JavaEE 6 EAR, pom для EAR выдает мне эту ошибку:

Выполнение плагина не охвачено конфигурацией жизненного цикла: org.apache.maven.plugins: maven-ear-plugin: 2.6: generate-application-xml (выполнение: 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>
О Чин Бун
источник

Ответы:

138

Это «особенность» плагина M2E, который был представлен некоторое время назад. Это напрямую не связано с плагином JBoss EAR, но также происходит с большинством других плагинов Maven.

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

«Выполнение плагина не охвачено конфигурацией жизненного цикла»

См. Здесь более подробное объяснение и некоторые примеры конфигурации, которые необходимо добавить в pom, чтобы эта ошибка исчезла:

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

январь
источник
70
@Jan Я не понимаю концепции. M2E должен быть прозрачен для пользователя. Делайте то, что делает командная строка Maven, но изнутри eclipse. В данных конфигурации pom не должно быть указаний M2E, что делать. Если да, то это плохой дизайн. Кстати, эти ошибки иногда исчезают в новых версиях Eclipse и M2E.
рапт
8
Я согласен с восторгом. Мой POM не зависит от m2e, и я хотел бы добавить его сейчас только потому, что я использую Eclipse в качестве своей IDE. Это обман для других, работающих над тем же проектом, которые вполне могут использовать другую среду IDE, например IntelliJ. Если m2e нужны эти подсказки, он должен быть частью конфигурации m2e в Eclipse.
Уильям
12
Некоторые цели не имеют смысла в Eclipse. Например, у меня есть проекты, в которых ZIP файлы распаковываются в targetпапку. Вы бы не хотели, чтобы это повторялось «постепенно» после сохранения каждого исходного файла. Или, может быть, вы этого хотите. На самом деле m2e ничего не знает о вашей конкретной сборке. Вы можете сохранить то, что должен делать m2e, в Eclipse, POM или, возможно, установить коннектор m2e, который добавляет m2e больше знаний для обработки этапа сборки. Это варианты, которые вы должны увидеть. Я понимаю, что вы не хотите, чтобы ваш POM знал m2e, но это хорошее место для централизованной настройки этого для всех ваших разработчиков.
Сандер Верхаген
3
Проблема в том, что связанная документация для этого, как и большая часть документации по Maven или Eclipse. это абкадабра. Независимо от того, как сильно они пытаются объяснить это ясно, объяснение основывается на слишком большом количестве концепций, которые я, как относительно новый пользователь Maven, не понимаю и не знаю, как искать - все, что я нахожу, имеет ту же проблему: слишком много необъяснимых концепции. Слишком сложна технология или плохо организована документация. В любом случае кривая обучения высока. Ответы здесь добавляют большую ясность.
Reinierpost
10
@RicardoGladwell Вы неправильно поняли цель голосов против. Стрелка говорит: «Этот ответ бесполезен» - и это не соответствует действительности. Таким образом, даже если вам не нравится тон, в котором написан этот ответ, отрицательный голос был неуместным.
Давуд ибн Карим
43

в любом случае уже слишком поздно, но мое решение было простым: щелкните правой кнопкой мыши сообщение об ошибке в Eclipse и выберите Quick Fix >> Ignore для каждого pom с такими ошибками

java_newbie
источник
3
Еще не поздно. Я просто так решил проблему!
Reinierpost
2
Я тоже. Все эти исследования и попытки понять, в чем проблема, вызвали у меня головную боль, поэтому я проигнорировал это :) Спасибо.
dleerob
1
Это сработало для меня. Я подозреваю, что он автоматически генерирует то, что описано в ответе @Jan, который указывает на eclipse.org/m2e/documentation/m2e-execution-not-covered.html, потому что единственное изменение, которое я увидел после того, как я принял быстрое исправление, - это изменение моего pom. XML.
Майкл Ософски
Я попробовал еще раз на другом компьютере, и проблема исчезла, когда я обновился с JBehave 3.9.4 до 3.9.5, поскольку в моем случае это был плагин JBehave, который создавал ошибку (я сгенерировал конфигурацию плагина из архетипа JBehave Maven ( jbehave.org/reference/stable/archetypes.html ))
Майкл Ософски 02 янв.15
30

В Eclipse есть концепция инкрементальных сборок, что невероятно полезно, так как экономит много времени.

Как это полезно

Допустим, вы только что изменили один файл .java. Инкрементальные построители смогут компилировать код без необходимости перекомпилировать все (что займет больше времени).

Теперь в чем проблема с плагинами Maven

Большинство плагинов 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 или любого из его родительских. М2Э считывает эту конфигурацию , чтобы настроить на project.Below SNIPPET инструктирует m2e игнорировать jslintи compressцели 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) Если вы не предпочитаете загрязнять свой pom-файл этими метаданными, вы можете сохранить его во внешнем XML-файле (вариант 3). Ниже приведен пример отображения файла , который инструктирует m2e игнорировать jslintи compressцели 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) Если вам не нравится какой-либо из этих 3 вариантов, вы можете использовать коннектор m2e (расширение) для плагина maven. Коннектор, в свою очередь, предоставит метаданные m2e. Вы можете увидеть пример информации о метаданных в коннекторе по этой ссылке . Вы могли заметить, что метаданные относятся к конфигуратору. Это просто означает, что m2e делегирует ответственность этому конкретному java-классу, предоставленному автором расширения. Конфигуратор может настроить проект (например, добавить дополнительные исходные папки и т. Д.) И решить, выполнять ли фактический плагин maven во время инкрементной сборки (если неправильное управление в конфигураторе, это может привести к бесконечным сборкам проекта)

По этим ссылкам приведен пример конфигуратора ( ссылка1 , ссылка2 ). Так что, если плагином можно управлять через внешний разъем, вы можете его установить. m2e ведет список таких соединителей, предоставленный другими разработчиками, он известен как каталог обнаружения. m2e предложит вам установить коннектор, если у вас еще нет метаданных сопоставления жизненного цикла для выполнения с помощью любого из вариантов (1-6), а в каталоге обнаружения есть некоторое расширение, которое может управлять выполнением.

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

5) m2e призывает авторов плагинов поддерживать инкрементную сборку и предоставлять отображение жизненного цикла в самом maven-plugin. Это будет означать, что пользователям не придется использовать какие-либо дополнительные сопоставления жизненного цикла или соединители. Некоторые авторы плагинов уже реализовали это

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

Теперь вернемся к вопросу: вы, вероятно, можете просто предоставить игнорирование сопоставления жизненного цикла в 1, 2 или 3 для той конкретной цели, которая создает для вас проблемы.

coderplus
источник
14

Хороший обходной путь, чтобы напомнить вам, что m2e можно было бы лучше настроить без наследования проекта ложноположительного маркера ошибки, - просто понизить эти ошибки до предупреждений:

Окно -> Настройки -> Maven -> Ошибки / предупреждения -> Выполнение плагина не охвачено конфигурацией жизненного цикла = Предупреждение

mgobeil
источник
12

Я попытался выполнить конкретное подключение сразу после очистки, то есть после очистки (по умолчанию это фаза очистки). Это сработало для меня с eclipse indigo. Просто добавленная пост-чистка решила проблему для меня.

<executions>
  <execution>
    <configuration>
    </configuration>
   <phase>post-clean</phase>
    <goals>
      <goal>update-widgetset</goal>
    </goals>
  </execution>
</executions> 
Чарит Де Сильва
источник
11
Не могли бы вы объяснить, почему это работает? «Только что добавлено» и «разрешено для меня» на самом деле не увеличивает мое доверие к нему, поскольку он не имеет нежелательного скрытого поведения.
Киссаки,
Разумеется, у меня есть a phaseи a goalдля executionфайла pom.xml, который мне был предоставлен, и я все еще получаю сообщение об ошибке.
Reinierpost
Мужики - мои извинения. Я не эксперт по maven, хотел помочь кому-то в поисках быстрого решения. Я должен дать больше информации. Я думаю, что хитрость здесь заключается во включении фазы исполнения. Поскольку mojo может определять фазы выполнения, я попытался выполнить конкретное подключение сразу после очистки, то есть после очистки (по умолчанию это фаза очистки). Это сработало для меня с eclipse indigo. Вероятно, конкретный плагин мог использовать некоторые зависимости от основного pom? IIRC это был плагин на основе Vaadin.
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 / lifecycle-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, вы можете пропустить важные шаги сборки. Вы также можете рассмотреть возможность добавления поддержки расширения Maven Eclipse EAR для несопоставленной цели жизненного цикла.

Рикардо Гладуэлл
источник
0

С помощью механизма, описанного в ответе Яна, я проинструктировал плагин m2e игнорировать цель «generate-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>
StaticNoiseLog
источник
0

Вам необходимо понять содержимое M2E_plugin_execution_not_covered и выполнить шаги, указанные ниже:

  • Выберите банку org.eclipse.m2e.lifecyclemapping.defaults из папки плагина eclipse
  • Извлеките его и откройте lifecycle-mapping-metadata.xml, где вы можете найти все pluginExecutions.
  • Добавьте pluginExecutions ваших плагинов, которые отображаются как ошибки с тегами <ignore/>под <action>.

например: для ошибки write-project-properties добавьте этот фрагмент в <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.
  • Перезапустить Eclipse

Вы не должны видеть ошибок в будущем ни для одного проекта.

Gowtham
источник
0

Несмотря на то, что вопрос слишком старый, я хотел бы поделиться решением, которое сработало для меня, потому что я уже все проверил, когда дело доходит до этой ошибки. Это была боль, я потратил два дня на попытки, и в конце концов решение было таким:

обновить плагин M2e в eclipse

очистить и построить снова

Уильям Кинаан
источник