плагін maven-залежність (цілі "копія-залежність", "розпакувати") не підтримується 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ørn Ravn Andersen

@ ThorbjørnRavnAndersen, що таке швидке виправлення?
Мухаммед Гельбана

1
@MuhammadGelbana In Eclipse "швидке виправлення" означає: поставити курсор на проблему; натисніть Ctrl-1; Виберіть Швидке виправлення.
Thorbjørn Ravn Andersen

Відповіді:


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:

Налаштування затемнення


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-pluginINTO 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>. При використанні швидкого виправлення в Eclipse те саме додається над звичайним <plugins>, і здається, що розташування також працює добре. Ключовим є перехід <ignore>на <execute>. Приємно.
Ар'ян

1
Знайдено, що мені потрібно <runOnIncremental> false </runOnIncremental> у виконанні, як рекомендовано, за посиланням, яке ви надали. Дякую за відповідь, яка поставила мене на правильний шлях.
кібермонах

Не потрібно додавати це ПІСЛЯ ваших pluginsусередині build, ви можете додати це раніше.
Fagner Brack

38

Якщо для вашого проекту важливі залежності від копіювання, розпакування, пакування тощо, не слід ігнорувати його. Ви повинні долучити <plugins>до <pluginManagement>перевіреного Eclipse Indigo SR1, maven 2.2.1


4
Дякую, він також допомагає у Eclipse Indigo SR2
ствол

1
Я трохи загублений ... Чи означає це використання коду вище, але <execute />замість <ignore />? Дякую!
xverges

1
Хочете пояснити трохи більше? Просто вважаючи а <plugin>в <pluginManagement>але все ще посилання це робити свою роботу, по- , як і раніше дає мені таке ж попередження.
Ар'ян

@CaioToOn, може, ти знаєш ще дещо ...? Після його додавання <pluginManagement>мені ще потрібно додати "звичайний" 2 рядок <build><plugins><plugin>..., посилаючись на той, який налаштовано <pluginManagement>, правда? (Ще бачимо, що Юнона скаржиться на те саме, коли в <pluginManagement>.)
Арджан

@Arjan слід додати pluginsтег pluginManagement. Але подивіться на відповідь, яку я дав нижче, stackoverflow.com/a/12109018/179138 . Запропонований ігнорує виконання, але не виконує плагін на Eclipse.
Caio Cunha

16

Щоб змусити його працювати, замість того, щоб ігнорувати його, ви можете встановити з'єднувач m2e для плагіна Maven-залежність:
https://github.com/ianbrandt/m2e-maven-dependency-plugin

Ось як би це зробити в Eclipse:

  1. перейти до вікна / налаштування / Maven / відкриття /
  2. введіть URL-адресу каталогу: http://download.eclipse.org/technology/m2e/discovery/directory-1.4.xml
  3. натисніть кнопку Відкрити каталог
  4. виберіть модуль m2e-maven-залежність
  5. насолоджуватися

1
+1 для правильної відповіді. Просто пам’ятайте, що pom.xmlпісля установки плагіна зробіть невелике редагування файлу, інакше помилка може не піти.
Фагнер Брек

У Eclipse Luna URL-адресу каталогу завантажено.eclipse.org
technology/m2e/discovery/directory-1.5.xml

Я спробував це, але поля URL-адреси каталогу не можна редагувати! Моє значення встановлено на: download.eclipse.org/technology/m2e/discovery/directory.xml (тобто без -1.4) наприкінці. Будь-які ідеї, як / де можна було це коригувати?
mmo

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>

Чи можете ви надати собі мету стратити в затемненні?
Джесс

1

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

З усіма проблемами, які у мене виникли, я вирішив перейти до Eclipse Luna, і рішення, описані вище, не спрацювали для мене.

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

На щастя, я дізнався, як видалити всі помилки. Перейдіть у вікно-> Налаштування-> Maven-> Помилка / попередження та змініть параметр "Виконання плагіну, не охопленого життєвим циклом ..." на "Ігнорувати". Сподіваюся, це допомагає.


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>

і все працює нормально під m2e1.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помилку.


Так, саме ця мета цього запису: m2e тепер вимагає з'єднувачів для відображення виконання плагінів у життєвому циклі збірки Eclipse. <br/> Навіть на момент написання мого коментаря m2e підтримує лише декілька таких роз'ємів: ви повинні використовувати lifecycle-mappingплагін Maven, щоб вказувати m2e, як боротися з непідтримуваним плагіном (тут maven-dependency-plugin)
Олів'є Б.

0

Інший варіант - перейти на вкладку "Проблеми", клацнути правою кнопкою миші помилку, натиснути застосувати швидке виправлення. Слід створити код ігнорування xml та застосувати його .pom файл для вас.

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