Плагин maven-dependency-plugin (цели «copy-dependencies», «unpack») не поддерживается m2e

155

У меня довольно простой проект Maven:

<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

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

Нафтули Кей
источник
4
В эти дни m2e предоставляет быстрое исправление для добавления соответствующей конфигурации в ваш pom.xml, чтобы m2e игнорировал неподдерживаемую цель.
Торбьерн Равн Андерсен
@ ThorbjørnRavnAndersen, как быстро это исправить?
Мухаммед Гелбана
1
@MuhammadGelbana В Eclipse «быстрое решение» означает: навести курсор на проблему; нажмите Ctrl-1; Выберите Quick Fix.
Турбьёрн Равн Андерсен

Ответы:

164

Кажется, это известная проблема. Вы можете поручить 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 ... -> Обновить конфигурацию проекта.

Читать подробнее: http://wiki.eclipse.org/M2E_plugin_execution_not_covered#m2e_maven_plugin_coverage_status

Вариант 2: глобальное переопределение затмения

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

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

В Eclipse/Preferences/Maven/Lifecycle MappingsРазглядеть к этому файлу и нажмите OK:

Настройки Eclipse

Maksimov
источник
10
Что делать, если зависимости от копирования - жизненно важный шаг в создании вашего файла WAR? Я работаю с чудовищным вызовом m2Eclipse, и даже если изменить действие для выполнения, жизненно важные файлы не копируются в целевую папку ...
bartv
1
Для автоматически сгенерированных настроек игнорирования @PhoneTech, m2e добавляет комментарий «Конфигурация этого плагина используется только для хранения настроек Eclipse m2e. Она не влияет на саму сборку Maven». Не уверен, что это значит, поскольку вы говорите, что вещи не копируются для вас.
Арджан
6
Да, это помогло ... но это ужасно много кода, чтобы просто избавиться от предупреждения: P
dokaspar
Это все еще дает мне предупреждение, но ошибка исчезла.
Stevecross
57

Эта проблема M2E для выполнения плагина Eclipse M2E не рассматривается .

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

Вы должны добавить это после вашего plugins, внутри build. Это позволит устранить ошибку и сделать М2Э признать цель copy-depenciesиз maven-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
Это решает это действительно. И я был глуп, думая, что когда люди говорят о том, чтобы <plugins>войти в <pluginManagement>кого-то, нужно на самом деле переместить <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId>туда. Но это о том, <groupId>org.eclipse.m2e</groupId> <artifactId>lifecycle-mapping</artifactId>что должно быть включено в <pluginManagement>. При использовании Quick Fix в Eclipse, то же самое добавляется над обычным <plugins>, и кажется, что расположение тоже работает хорошо. Ключ затем к изменению <ignore>в <execute>. Ницца.
Арджан
1
Обнаружил, что мне нужно <runOnIncremental> false </ runOnIncremental> в execute, как рекомендовано по указанной вами ссылке. Спасибо за ответ, поставьте меня на правильный путь.
кибер-монах
Там нет необходимости добавлять это ПОСЛЕ вашего pluginsвнутри build, вы можете добавить это раньше.
Фагнер Брэк,
38

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

user311174
источник
4
Спасибо, это также помогает в Eclipse Indigo SR2
Stemm
1
Я немного растерялся ... Означает ли это использовать код выше, но с <execute />вместо <ignore />? Спасибо!
xverges
1
Хотите объяснить немного больше? Просто полагая а <plugin>в <pluginManagement>но все еще ссылки это делать свою работу, по- прежнему дает мне такое же предупреждение.
Арджан
@CaioToOn, может быть, вы знаете больше ...? После добавления к нему <pluginManagement>мне все еще нужно добавить «обычную» 2 строку <build><plugins><plugin>..., ссылающуюся на ту, которая настроена в <pluginManagement>, верно? (Все еще видя, как Юнона жалуется на то же самое, когда <pluginManagement>
входит
@Arjan, вы должны заключить свой pluginsтег в pluginManagement. Но взгляните на ответ, который я дал ниже, stackoverflow.com/a/12109018/179138 . Предлагаемый игнорирует выполнение, но не выполняет плагин в Eclipse.
Кайо Кунья
16

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

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

  1. зайдите в Окно / Настройки / Maven / Discovery /
  2. введите URL-адрес каталога: http://download.eclipse.org/technology/m2e/discovery/directory-1.4.xml
  3. нажмите Открыть каталог
  4. выберите плагин m2e-maven-dependency-plugin
  5. наслаждаться
марио
источник
1
+1 за правильный ответ. Просто не забудьте внести небольшое изменение в pom.xmlфайл после установки плагина, иначе ошибка может не исчезнуть.
Фагнер Брэк
В Eclipse Luna URL-адрес каталога: download.eclipse.org/technology/m2e/discovery/directory-1.5.xml
января
Я пробовал это, но поля URL каталога не редактируются! Мой установлен на: download.eclipse.org/technology/m2e/discovery/directory.xml (т.е. без -1.4) в конце. Любые идеи, как / где можно это настроить?
ммм
8

Несмотря на ответ 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>
SGB
источник
Можете ли вы предоставить цель выполнить в затмении?
Джесс
1

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

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

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

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

Myluco
источник
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ошибку.

Andna
источник
Да, именно в этом и заключается цель этой записи: m2e теперь требуются коннекторы для сопоставления выполнения плагинов в жизненном цикле сборки Eclipse. <br/> Даже на момент написания моего комментария m2e поддерживает только несколько таких коннекторов: вы должны использовать lifecycle-mappingплагин Maven, чтобы указать m2e, как обращаться с неподдерживаемым плагином (здесь maven-dependency-plugin)
Olivier B.
0

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

голубое небо
источник