maven-dependency-plugin (cele „copy-dependencies”, „unpack”) nie jest obsługiwane przez m2e

155

Mam dość prosty projekt Mavena:

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

Jednak w m2eclipse pojawia się następujący błąd:

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

Dlaczego obchodzi mnie, że m2eclipse nie „obsługuje” tego zadania? Maven robi i to wszystko, na czym naprawdę mi zależy. Jak mogę usunąć ten błąd z mojego projektu?

Naftuli Kay
źródło
4
Obecnie m2e zapewnia szybką poprawkę, która pozwala dodać odpowiednią konfigurację do pom.xml, aby m2e ignorowało nieobsługiwany cel.
Thorbjørn Ravn Andersen
@ ThorbjørnRavnAndersen, jaka jest szybka naprawa?
Muhammad Gelbana
1
@MuhammadGelbana W Eclipse „szybka naprawa” oznacza: umieść kursor na problemie; naciśnij Ctrl-1; Wybierz opcję Szybka naprawa.
Thorbjørn Ravn Andersen

Odpowiedzi:

164

Wydaje się, że jest to znany problem. Możesz poinstruować m2e, aby to zignorował.

Opcja 1: pom.xml

Dodaj następujące elementy wewnątrz <build/>tagu:

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

Będziesz musiał zrobić Maven ... -> Zaktualizuj konfigurację projektu w swoim projekcie po tym.

Czytaj więcej: http://wiki.eclipse.org/M2E_plugin_execution_not_covered#m2e_maven_plugin_coverage_status

Opcja 2: nadpisanie globalnego zaćmienia

Aby uniknąć zmiany plików POM, zastąpienie ignorowania można zastosować do całego obszaru roboczego za pomocą ustawień Eclipse.

Zapisz ten plik gdzieś na dysku: https://gist.github.com/maksimov/8906462

W Eclipse/Preferences/Maven/Lifecycle Mappingsprzejdź do tego pliku i kliknij OK:

Ustawienia Eclipse

maksimov
źródło
10
Co się stanie, jeśli zależności od kopiowania są istotnym krokiem w tworzeniu pliku WAR? Pracuję z potwornym wywołaniem m2Eclipse i nawet jeśli zmieniam akcję na wykonanie, ważne pliki nie są kopiowane do folderu docelowego ...
bartv
1
W przypadku automatycznie generowanych ustawień ignorowania, @PhoneTech, m2e dodaje komentarz „Konfiguracja tej wtyczki służy tylko do przechowywania ustawień Eclipse m2e. Nie ma ona wpływu na samą kompilację Mavena”. Nie jestem jednak pewien, co to oznacza, ponieważ mówisz, że rzeczy nie są dla ciebie kopiowane.
Arjan
6
Tak, pomogło ... ale to strasznie dużo kodu, aby po prostu pozbyć się ostrzeżenia: P
dokaspar
To nadal daje mi ostrzeżenie, ale błąd zniknął.
stevecross
57

Jest to problem występujący w M2E dla wtyczki Eclipse M2E, którego nie omówiono .

Aby rozwiązać ten problem, wszystko, co musisz zrobić, to zmapować cykl życia, którego nie rozpoznaje, i poinstruować M2E, aby go wykonała.

Powinieneś dodać to po swoim plugins, wewnątrz build. Spowoduje to usunięcie błędu i zrobić M2E rozpoznać cel copy-depenciesz maven-dependency-plugini uczynić pracę POM jak oczekiwano, kopiowanie zależności do folderu za każdym razem zaćmienie zbudować. Jeśli chcesz po prostu zignorować błąd, zmień <execute />na <ignore />. Nie ma potrzeby zamykania się maven-dependency-pluginw pluginManagement, jak sugerowano wcześniej.

<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>
Caio Cunha
źródło
4
To rzeczywiście rozwiązuje problem. I byłem głupi, myśląc, że kiedy ludzie mówią o przeprowadzce <plugins>do <pluginManagement>jednego, to właściwie powinno się <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId>tam przenieść . Ale chodzi o to <groupId>org.eclipse.m2e</groupId> <artifactId>lifecycle-mapping</artifactId>, co należy zamknąć <pluginManagement>. Podczas korzystania z Szybkiej poprawki w Eclipse, to samo jest dodawane powyżej zwykłego <plugins>i wydaje się, że lokalizacja też działa dobrze. Kluczem jest więc zmiana <ignore>w <execute>. Miły.
Arjan
1
Okazało się, że potrzebowałem <runOnIncremental> false </runOnIncremental> w ramach wykonania, zgodnie z zaleceniami podanego linku. Dzięki za odpowiedź ustawiłem mnie na właściwej ścieżce.
cyber-mnich
Nie ma potrzeby, aby dodać tę Po pluginsWewnątrz buildmożna dodać tego wcześniej.
Fagner Brack
38

Jeśli zależności kopiowania, rozpakowywania, pakowania itp. Są ważne dla twojego projektu, nie powinieneś ich ignorować. Trzeba załączyć <plugins>w <pluginManagement>przetestowane z Eclipse Indigo SR1, Maven 2.2.1

user311174
źródło
4
Dzięki, pomaga również w Eclipse Indigo SR2
stemm
1
Trochę się pogubiłem ... Czy to oznacza użycie powyższego kodu, ale <execute />zamiast tego <ignore />? Dzięki!
xverges
1
Chcesz wyjaśnić trochę więcej? Samo włożenie <plugin>do, <pluginManagement>ale wciąż odwoływanie się do niego, aby wykonać swoją pracę, nadal daje mi to samo ostrzeżenie.
Arjan
@CaioToOn, może znasz coś więcej ...? Po dodaniu go do <pluginManagement>tego nadal muszę dodać „zwykłą” 2 linię <build><plugins><plugin>..., odnosząc się do tej skonfigurowanej w programie <pluginManagement>, prawda? (Nadal widzę, jak Juno narzeka na to samo, gdy jest w <pluginManagement>
środku
@Arjan powinieneś dołączyć swój pluginstag do pluginManagement. Ale spójrz na odpowiedź, którą podałem poniżej, stackoverflow.com/a/12109018/179138 . Sugerowany ignoruje wykonanie, ale nie uruchamiaj wtyczki na Eclipse.
Caio Cunha
16

Aby to zadziałało, zamiast go ignorować, możesz zainstalować złącze m2e dla wtyczki maven-dependency-plugin:
https://github.com/ianbrandt/m2e-maven-dependency-plugin

Oto, jak byś to zrobił w Eclipse:

  1. przejdź do Window / Preferences / Maven / Discovery /
  2. wprowadź adres URL katalogu: http://download.eclipse.org/technology/m2e/discovery/directory-1.4.xml
  3. kliknij Otwórz katalog
  4. wybierz wtyczkę m2e-maven-dependency-plugin
  5. cieszyć się
mario
źródło
1
+1 za PRAWIDŁOWĄ odpowiedź. Pamiętaj tylko, aby pom.xmlpo zainstalowaniu wtyczki dokonać niewielkiej edycji pliku, w przeciwnym razie błąd może nie zniknąć.
Fagner Brack
W Eclipse Luna adres URL katalogu to download.eclipse.org/technology/m2e/discovery/directory-1.5.xml
jansohn
Próbowałem, ale pól adresu URL katalogu nie można edytować! Mój jest ustawiony na: download.eclipse.org/technology/m2e/discovery/directory.xml (tj. Bez -1.4) na końcu. Jakieś pomysły, jak / gdzie można to zmienić?
mmo
8

Pomimo odpowiedzi udzielonej przez CaioToOn powyżej, początkowo nadal miałem problemy z uruchomieniem tego.

Po wielu próbach w końcu udało się. Wklejam tutaj moją ostateczną wersję - mam nadzieję, że przyniesie to korzyści komuś innemu.

    <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
źródło
Czy możesz podać cel wykonania w zaćmieniu?
Jess
1

Miałem ten sam problem, próbując załadować projekt Hadoop w zaćmieniu. Wypróbowałem powyższe rozwiązania i wydaje mi się, że zadziałało to w Eclipse Kepler ... nie jestem już nawet pewien (próbowałem zbyt wielu rzeczy).

Ze wszystkimi problemami, które miałem, zdecydowałem się przejść do Eclipse Luna i powyższe rozwiązania nie zadziałały.

Był inny post, który zalecał zmianę tagu ... na pakiet. Zacząłem to robić, a to by „wyczyściło” błędy… Zaczynam jednak myśleć, że zmiany ugryzą mnie później - nie jestem ekspertem od Mavena.

Na szczęście dowiedziałem się, jak usunąć wszystkie błędy. Idź do Okno-> Preferencje-> Maven-> Błąd / Ostrzeżenia i zmień opcję „Wykonanie wtyczki nie jest objęte cyklem życia ...” na „Ignoruj”. Mam nadzieję, że to pomoże.

Myluco
źródło
0

Wiem, że to stary post, ale dzisiaj też zmagałem się z tym problemem i użyłem szablonu z tej strony: 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>

i wszystko działa dobrze pod m2e1.3.1.

Kiedy próbowałem użyć

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

Mam też m2ebłąd.

Andna
źródło
Tak, dokładnie to jest celem tego wpisu: m2e wymaga teraz konektorów do mapowania wykonywania wtyczek w cyklu życia kompilacji Eclipse. <br/> Nawet w momencie pisania mojego komentarza m2e obsługuje tylko kilka takich złączy: musisz użyć lifecycle-mappingwtyczki Maven, aby poinstruować m2e, jak radzić sobie z nieobsługiwaną wtyczką (tutaj maven-dependency-plugin)
Olivier B.
0

Inną opcją jest przejście do zakładki problemów, kliknięcie prawym przyciskiem myszy błędu i kliknięcie Zastosuj szybką naprawę. Powinien wygenerować ignorowany kod xml i zastosować go do pliku .pom.

niebieskie niebo
źródło