2012-01-02 6 views
148

У меня есть довольно простой проект Maven:Maven-зависимость-плагин (цели «копировать-зависимость», «распаковывать») не поддерживается m2e

<project> 
    <dependencies> 
     ... 
    </dependencies> 

    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-dependency-plugin</artifactId> 
       <version>2.4</version> 
       <executions> 
        <execution> 
         <id>copy-dependencies</id> 
         <phase>package</phase> 
         <goals> 
          <goal>copy-dependencies</goal> 
         </goals> 
         <configuration> 
          <outputDirectory>${project.build.directory}/dependencies</outputDirectory> 
         </configuration>  
        </execution> 
       </executions> 
      </plugin> 
     </plugins> 
    </build> 
</project> 

Однако, я получаю следующее сообщение об ошибке в m2eclipse:

Description Resource Path Location Type 
maven-dependency-plugin (goals "copy-dependencies", "unpack") is not supported by m2e. pom.xml /jasperreports-test line 60 Maven Project Build Lifecycle Mapping Problem 

Почему меня интересует, не работает ли «mecllipse» для этой задачи? Мейвен делает, и это все, что мне действительно нужно. Как я могу получить эту ошибку в моем проекте, чтобы уйти?

+4

В эти дни m2e обеспечивает QuickFix добавить соответствующую конфигурацию вашего pom.xml, чтобы m2e игнорировать неподдерживаемые цели. –

+0

@ ThorbjørnRavnAndersen, что такое быстрое исправление? –

+1

@MuhammadGelbana В Eclipse «быстрое исправление» означает: наведите курсор на проблему; нажмите Ctrl-1; Выберите Quick Fix. –

ответ

158

Это, кажется, известная проблема. Вы можете указать m2e игнорировать это.

Вариант 1: pom.xml

Добавьте следующий внутри <build/> тега:

<pluginManagement> 
<plugins> 
    <!-- Ignore/Execute plugin execution --> 
    <plugin> 
     <groupId>org.eclipse.m2e</groupId> 
     <artifactId>lifecycle-mapping</artifactId> 
     <version>1.0.0</version> 
     <configuration> 
      <lifecycleMappingMetadata> 
       <pluginExecutions> 
        <!-- copy-dependency plugin --> 
        <pluginExecution> 
         <pluginExecutionFilter> 
          <groupId>org.apache.maven.plugins</groupId> 
          <artifactId>maven-dependency-plugin</artifactId> 
          <versionRange>[1.0.0,)</versionRange> 
          <goals> 
           <goal>copy-dependencies</goal> 
          </goals> 
         </pluginExecutionFilter> 
         <action> 
          <ignore /> 
         </action> 
        </pluginExecution> 
       </pluginExecutions> 
      </lifecycleMappingMetadata> 
     </configuration> 
    </plugin> 
    </plugins></pluginManagement> 

Вам нужно будет сделать Maven ... - Configuration> Project Update над проектом после того, как это ,

Подробнее: http://wiki.eclipse.org/M2E_plugin_execution_not_covered#m2e_maven_plugin_coverage_status

Вариант 2: Глобальное Затмение Override

Чтобы избежать изменений ваших POM файлов, то игнорировать переопределение может быть применено ко всей рабочей области с помощью настроек Eclipse.

Сохраните этот файл где-то на диске: https://gist.github.com/maksimov/8906462

В Eclipse/Preferences/Maven/Lifecycle Mappings перейдите в этот файл и нажмите OK:

Eclipse Settings

+7

Что делать, если зависимости от копирования - важный шаг в создании вашего файла WAR? Я работаю с монстрацией вызова m2Eclipse и даже если вы изменяете действие для выполнения, жизненно важные файлы не копируются в целевую папку ... – PhoneTech

+1

Для автоматически генерируемых параметров игнорирования @PhoneTech, m2e добавляет комментарий * «Конфигурация этого плагина используется для хранения только настроек Eclipse m2e. Он не влияет на саму сборку Maven ». * Не уверен, что это значит, поскольку вы говорите, что вещи не копируются для вас. – Arjan

+6

Да, это помогло ... но это очень много кода, чтобы просто избавиться от предупреждения: P – dokaspar

38

Если Тетради зависимости, распаковка, упаковка и т.д., являются важными для вашего проекта вы не должны его игнорировать. Вы должны приложить ваш <plugins> в <pluginManagement> испытанного с Eclipse, Indigo SR1, Maven 2.2.1

+4

Спасибо, он также помогает в Eclipse Indigo SR2 – stemm

+1

Я немного потерял ... Означает ли это, используя код выше, но с '' вместо ''? Благодаря! – xverges

+2

Также работает над Juno. –

57

Это проблема М2Э Затмения M2E plugin execution not covered.

Чтобы решить эту проблему, все, что вам нужно сделать, - сопоставить жизненный цикл, который он не распознает, и поручить M2E выполнить его.

Вы должны добавить это после plugins, внутри build. Это устранит ошибку и заставит M2E распознать цель copy-depenciesmaven-dependency-plugin и заставить POM работать должным образом, копируя зависимости в папку каждый раз, когда Eclipse строит ее. Если вы просто хотите проигнорировать ошибку, то вы меняете <execute /> на <ignore />. Не нужно прилагать maven-dependency-plugin к pluginManagement, как было предложено ранее.

<pluginManagement> 
    <plugins> 
    <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-dependency-plugin</artifactId> 
       <versionRange>[2.0,)</versionRange> 
       <goals> 
        <goal>copy-dependencies</goal> 
       </goals> 
       </pluginExecutionFilter> 
       <action> 
       <execute /> 
       </action> 
      </pluginExecution> 
      </pluginExecutions> 
     </lifecycleMappingMetadata> 
     </configuration> 
    </plugin> 
    </plugins> 
</pluginManagement> 
+4

Это действительно решает. И я был глупым, думая, когда люди говорили о переезде '' '' pluginManagement'', нужно фактически переместить ' org.apache.maven.plugins maven-dependency-plugin' там. Но речь идет о ' org.eclipse.m2e lifecycle-mapping', который должен быть заключен в ''. При использовании Quick Fix в Eclipse то же самое добавляется * над * регулярным '', и кажется, что место тоже отлично работает. Затем ключ должен изменить '' на ''. Ницца. – Arjan

+1

Найдено, что мне нужно false в рамках выполнения, как рекомендовано в указанной вами ссылке. Спасибо за ответ, поставил меня на правильный путь. –

+0

Нет необходимости добавлять это ПОСЛЕ ваших 'плагинов' внутри' build', вы можете добавить это раньше. –

0

Я знаю, что это старый пост, но я боролся сегодня с этой проблемой также и я использовал шаблон с этой страницы: http://maven.apache.org/plugins/maven-dependency-plugin/usage.html

<project> 
    [...] 
    <build> 
    <plugins> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-dependency-plugin</artifactId> 
     <version>2.7</version> 
     <executions> 
      <execution> 
      <id>copy</id> 
      <phase>package</phase> 
      <goals> 
       <goal>copy</goal> 
      </goals> 
      <configuration> 
       <artifactItems> 
       <artifactItem> 
        <groupId>[ groupId ]</groupId> 
        <artifactId>[ artifactId ]</artifactId> 
        <version>[ version ]</version> 
        <type>[ packaging ]</type> 
        <classifier> [classifier - optional] </classifier> 
        <overWrite>[ true or false ]</overWrite> 
        <outputDirectory>[ output directory ]</outputDirectory> 
        <destFileName>[ filename ]</destFileName> 
       </artifactItem> 
       </artifactItems> 
       <!-- other configurations here --> 
      </configuration> 
      </execution> 
     </executions> 
     </plugin> 
    </plugins> 
    </build> 
    [...] 
</project> 

и все прекрасно работает под m2e 1.3.1.

Когда я попытался использовать

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-dependency-plugin</artifactId> 
      <version>2.4</version> 
      <executions> 
       <execution> 
        <id>copy-dependencies</id> 
        <phase>package</phase> 
        <goals> 
         <goal>copy-dependencies</goal> 
        </goals> 
        <configuration> 
         <outputDirectory>${project.build.directory}/dependencies</outputDirectory> 
        </configuration>  
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
</build> 

Я также получил m2e ошибку.

+0

Да, это точно цель этой записи: m2e теперь требует _connectors_ для сопоставления плагинов в жизненном цикле сборки Eclipse.
Даже во время написания моего комментария, m2e поддерживает только несколько таких разъемов: вы должны использовать плагин Maven для отображения жизненного цикла, чтобы указать m2e, как работать с неподдерживаемым плагином (здесь 'maven-dependency- plugin') –

7

Несмотря на ответ от CaioToOn выше, у меня все еще были проблемы с тем, чтобы это работало изначально.

После нескольких попыток, наконец, он работал. Вставьте мою последнюю версию здесь - надеясь, что это принесет пользу кому-то еще.

<build> 
     <plugins> 
      <!-- 
      Copy all Maven Dependencies (-MD) into libMD/ folder to use in classpath via shellscript 
      --> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-dependency-plugin</artifactId> 
       <version>2.8</version> 
       <executions> 
        <execution> 
         <id>copy</id> 
         <phase>package</phase> 
         <goals> 
          <goal>copy-dependencies</goal> 
         </goals> 
         <configuration> 
          <outputDirectory>${project.build.directory}/libMD</outputDirectory> 
         </configuration> 
        </execution> 
       </executions> 
      </plugin> 
     </plugins> 
     <!-- 
     Above maven-dependepcy-plugin gives a validation error in m2e. 
     To fix that, add the plugin management step below. Per: http://stackoverflow.com/a/12109018 
     --> 
     <pluginManagement> 
      <plugins> 
       <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-dependency-plugin</artifactId> 
             <versionRange>[2.0,)</versionRange> 
             <goals> 
              <goal>copy-dependencies</goal> 
             </goals> 
            </pluginExecutionFilter> 
            <action> 
             <execute /> 
            </action> 
           </pluginExecution> 
          </pluginExecutions> 
         </lifecycleMappingMetadata> 
        </configuration> 
       </plugin> 
      </plugins> 
     </pluginManagement> 
    </build> 
+0

Можете ли вы предоставить цель выполнить в затмении? – Jess

1

У меня была такая же проблема при попытке загрузить проект Hadoop в eclipse. Я пробовал решения выше, и я считаю, что это могло бы работать в Eclipse Kepler ... даже не уверен в этом (попробовал слишком много вещей).

Со всеми проблемами, с которыми я столкнулся, я решил перейти к Eclipse Luna, и приведенные выше решения не сработали для меня.

Было другое сообщение, которое рекомендовало изменить ... тег на упаковку. Я начал это делать, и это «очистило» ошибки ... Однако я начинаю думать, что изменения укусят меня позже - я не эксперт по Maven.

К счастью, я узнал, как удалить все ошибки. Перейдите в Window-> Preferences-> Maven-> Error/Warnings и измените параметр «Плагин, не охватываемый жизненным циклом ...», на «Игнорировать». Надеюсь, поможет.

0

Еще один вариант - перейти на вкладку проблем, щелкнуть правой кнопкой мыши по ошибке, нажать кнопку быстрого исправления. Он должен генерировать код игнорирования xml и применять его .pom-файл для вас.

13

Чтобы заставить его работать, вместо того, чтобы игнорировать его, вы можете установить разъем m2e для Maven-зависимостей-плагин:
https://github.com/ianbrandt/m2e-maven-dependency-plugin

Вот как вы могли бы сделать это в Eclipse:

  1. идут в окно/Preferences/Maven/Discovery/
  2. введите URL каталога: http://download.eclipse.org/technology/m2e/discovery/directory-1.4.xml
  3. нажмите кнопку Открыть Каталог
  4. выбрать m2e-Maven-зависимость-плагин
  5. наслаждаться
+1

+1 для ПРАВИЛЬНОГО ответа. Просто запомните, сделайте небольшое редактирование в файле 'pom.xml' после установки плагина, иначе ошибка может не исчезнуть. –

+0

В Eclipse Luna URL каталога http://download.eclipse.org/technology/m2e/discovery/directory-1.5.xml – lazlev

+0

Я пробовал это, но поля URL каталога не редактируются! Mine имеет значение: http://download.eclipse.org/technology/m2e/discovery/directory.xml (т. Е. Без -1.4) в конце. Любые идеи, как/где это можно было бы изменить? – mmo

Смежные вопросы