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

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

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

Выполнение плагина не распространяется на конфигурацию жизненного цикла: org.apache.maven.plugins: Maven-уха-плагин: 2.6: генерировать-приложения XML (исполнение: default-generate-application-xml, фаза: генерировать-ресурсы)

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

Ответ 1

Это "особенность" плагина 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

Ответ 2

В любом случае, это слишком поздно, но мое решение было простым щелчком правой кнопкой мыши по сообщению об ошибке в Eclipse и выбирая Quick Fix → Игнорировать для каждой ошибки с такими ошибками

Ответ 3

Eclipse имеет концепцию инкрементных построений. Это невероятно полезно, так как это экономит много времени.

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

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

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

Большинство плагинов maven не предназначены для инкрементных сборок и, следовательно, создают проблемы для m2e. m2e не знает, является ли цель плагина чем-то важным, или если это не имеет значения. Если он просто запускает каждый плагин, когда меняется один файл, это займет много времени.

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

  • pom.xml файл проекта
  • родительский, grand-parent и т.д. файлы pom.xml
  • [m2e 1.2+] параметры рабочей области
  • установленные расширения m2e
  • [m2e 1.1+] метаданные отображения жизненного цикла, предоставляемые плагином maven
  • метаданные отображения жизненного цикла по умолчанию, поставляемые с m2e

1,2 означает указание раздела pluginManagement в теге вашего файла pom или любого из его родителей. M2E читает эту конфигурацию, чтобы настроить проект. Блок-схема показывает, что m2e игнорирует цели jslint и compress юикомпрессор-maven-plugin

<pluginManagement>
        <plugins>
            <!--This plugin 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. В этой ссылке link1, link2). Поэтому, если плагин - это то, что можно управлять через внешний разъем, вы можете его установить. m2e поддерживает список таких разъемов, предоставленных другими разработчиками. Это известно как каталог обнаружения. m2e предложит вам установить соединитель, если у вас еще нет метаданных сопоставления жизненного цикла для выполнения через любой из параметров (1-6), а в каталоге обнаружения есть расширение, которое может управлять выполнением.

Ниже показано, как m2e предлагает установить соединитель для модуля build-helper-maven-plugin. install connector suggested from the discovery catalog.

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

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

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

Ответ 4

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

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

Ответ 5

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

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

Ответ 6

Я смог решить ту же проблему с 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, чтобы увидеть, что ошибки не исчезли.

Ответ 7

От 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 FixIgnore for every pom with such errors.

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

Ответ 8

Благодаря механизму, объясненному в ответе Jan, я дал указание подключить 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 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>

Ответ 9

Вам нужно понять содержимое M2E_plugin_execution_not_covered и выполнить следующие действия:

  • Выберите файл org.eclipse.m2e.lifecyclemapping.defaults из папки плагина eclipse.
  • Извлеките его и откройте lifecycle-mapping-metadata.xml, где вы можете найти все плагины.
  • Добавьте плагинExecutions ваших плагинов, которые отображаются как ошибки с <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

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

Ответ 10

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

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

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