Das Maven-Dependency-Plugin (Ziele "Copy-Dependencies", "Unpack") wird von m2e nicht unterstützt

155

Ich habe ein ziemlich einfaches Maven-Projekt:

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

In m2eclipse wird jedoch der folgende Fehler angezeigt:

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

Warum kümmert es mich, wenn m2eclipse diese Aufgabe nicht "unterstützt"? Maven tut es und das ist alles, was mich wirklich interessiert. Wie kann ich diesen Fehler in meinem Projekt beheben?

Naftuli Kay
quelle
4
Heutzutage bietet m2e einen Quickfix, um Ihrer pom.xml die entsprechende Konfiguration hinzuzufügen, damit m2e das nicht unterstützte Ziel ignoriert.
Thorbjørn Ravn Andersen
@ ThorbjørnRavnAndersen, was ist die schnelle Lösung?
Muhammad Gelbana
1
@MuhammadGelbana In Eclipse bedeutet eine "schnelle Lösung": Setzen Sie den Cursor auf das Problem; Drücken Sie Strg-1. Wählen Sie Quick Fix.
Thorbjørn Ravn Andersen

Antworten:

164

Es scheint ein bekanntes Problem zu sein. Sie können m2e anweisen, dies zu ignorieren.

Option 1: pom.xml

Fügen Sie Folgendes in Ihr <build/>Tag ein:

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

Danach müssen Sie Maven ... -> Projektkonfiguration für Ihr Projekt aktualisieren.

Lesen Sie mehr: http://wiki.eclipse.org/M2E_plugin_execution_not_covered#m2e_maven_plugin_coverage_status

Option 2: Global Eclipse Override

Um zu vermeiden, dass Ihre POM-Dateien geändert werden, kann die Überschreibung zum Ignorieren über die Eclipse-Einstellungen auf den gesamten Arbeitsbereich angewendet werden.

Speichern Sie diese Datei irgendwo auf der Festplatte: https://gist.github.com/maksimov/8906462

In Eclipse/Preferences/Maven/Lifecycle Mappingsbrowse auf diese Datei und klicken Sie auf OK:

Eclipse-Einstellungen

maksimov
quelle
10
Was ist, wenn Kopierabhängigkeiten ein wichtiger Schritt beim Erstellen Ihrer WAR-Datei sind? Ich arbeite mit Monstrosität am Aufruf m2Eclipse und selbst wenn ich die auszuführende Aktion ändere, werden die wichtigen Dateien nicht in den
Zielordner
1
Für automatisch generierte Ignoriereinstellungen, @PhoneTech, fügt m2e den Kommentar "Die Konfiguration dieses Plugins wird nur zum Speichern von Eclipse m2e-Einstellungen verwendet. Sie hat keinen Einfluss auf den Maven-Build selbst." Ich bin mir nicht sicher, was das bedeutet, da Sie sagen, dass Dinge nicht für Sie kopiert werden.
Arjan
6
Ja, es hat geholfen ... aber das ist eine Menge Code, um eine Warnung loszuwerden: P
dokaspar
Dies gibt mir immer noch eine Warnung, aber der Fehler ist weg.
Stevecross
57

Dies ist ein Problem der Ausführung des M2E für Eclipse M2E-Plugins, das nicht behandelt wird .

Um dieses Problem zu lösen, müssen Sie lediglich den nicht erkannten Lebenszyklus abbilden und M2E anweisen, es auszuführen.

Sie sollten dies nach Ihrem plugins, innerhalb der hinzufügen build. Dadurch wird der Fehler behoben und M2E erkennt das Ziel copy-depenciesvon maven-dependency-pluginund sorgt dafür, dass das POM wie erwartet funktioniert, und kopiert jedes Mal, wenn Eclipse es erstellt, Abhängigkeiten in den Ordner. Wenn Sie den Fehler nur ignorieren möchten, ändern Sie <execute />für <ignore />. Keine Notwendigkeit , Ihre zum Einschließen maven-dependency-pluginin pluginManagement, wie zuvor vorgeschlagen.

<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
quelle
4
Dies löst es in der Tat. Und ich war dumm und dachte, wenn Leute darüber sprachen, <plugins>in <pluginManagement>einen zu ziehen, sollte man das tatsächlich dort hineinziehen <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId>. Aber es geht um das <groupId>org.eclipse.m2e</groupId> <artifactId>lifecycle-mapping</artifactId>, was eingeschlossen werden muss <pluginManagement>. Wenn Sie Quick Fix in Eclipse verwenden, wird dasselbe über dem regulären hinzugefügt <plugins>, und es scheint, dass die Position auch gut funktioniert. Key ist dann zu ändern <ignore>in <execute>. Nett.
Arjan
1
Es wurde festgestellt, dass ich <runOnIncremental> false </ runOnIncremental> für die Ausführung benötigte, wie auf dem von Ihnen angegebenen Link empfohlen. Danke für die Antwort, die mich auf den richtigen Weg gebracht hat.
Cyber-Mönch
Es ist nicht erforderlich, dies hinzuzufügen, nachdem Sie sich pluginsin dem befinden build. Sie können dies vorher hinzufügen.
Fagner Brack
38

Wenn Kopierabhängigkeiten, Entpacken, Packen usw. für Ihr Projekt wichtig sind, sollten Sie es nicht ignorieren. Sie haben Ihre einzuschließen <plugins>in <pluginManagement>getestet mit Eclipse Indigo SR1 Maven 2.2.1

user311174
quelle
4
Danke, es hilft auch in Eclipse Indigo SR2
Stemm
1
Ich bin ein bisschen verloren ... Bedeutet das, den obigen Code zu verwenden, aber mit <execute />statt <ignore />? Vielen Dank!
xverges
1
Möchtest du etwas mehr erklären? Nur ein <plugin>in zu setzen, <pluginManagement>aber immer noch darauf zu verweisen, um seine Arbeit zu erledigen, gibt mir immer noch die gleiche Warnung.
Arjan
@CaioToOn, vielleicht weißt du noch mehr ...? Nach dem Hinzufügen muss <pluginManagement>ich noch eine "normale" 2-Zeile hinzufügen <build><plugins><plugin>..., die auf die in konfigurierte Zeile verweist <pluginManagement>, oder? (Ich sehe immer noch, wie Juno sich über dasselbe beschwert, wenn er da ist <pluginManagement>.)
Arjan,
@Arjan sollten Sie Ihr pluginsTag mit einschließen pluginManagement. Aber werfen Sie einen Blick auf die Antwort, die ich unten gegeben habe: stackoverflow.com/a/12109018/179138 . Der vorgeschlagene ignoriert die Ausführung, führt das Plugin jedoch nicht in Eclipse aus.
Caio Cunha
16

Damit es funktioniert, können Sie den m2e-Connector für das Maven-Dependency-Plugin installieren, anstatt ihn zu ignorieren:
https://github.com/ianbrandt/m2e-maven-dependency-plugin

So würden Sie es in Eclipse machen:

  1. Gehen Sie zu Fenster / Einstellungen / Maven / Entdeckung /
  2. Geben Sie die Katalog-URL ein: http://download.eclipse.org/technology/m2e/discovery/directory-1.4.xml
  3. Klicken Sie auf Katalog öffnen
  4. Wählen Sie das m2e-maven-Dependency-Plugin
  5. genießen
Mario
quelle
1
+1 für die RICHTIGE Antwort. Denken Sie daran, die pom.xmlDatei nach der Installation des Plugins geringfügig zu bearbeiten , da sonst der Fehler möglicherweise nicht behoben wird.
Fagner Brack
In Eclipse Luna lautet die Katalog-URL download.eclipse.org/technology/m2e/discovery/directory-1.5.xml
jansohn
Ich habe es versucht, aber die Katalog-URL-Felder können nicht bearbeitet werden! Meins ist eingestellt auf: download.eclipse.org/technology/m2e/discovery/directory.xml (dh ohne -1,4) am Ende. Irgendwelche Ideen, wie / wo könnte man das einstellen?
mmo
8

Trotz der Antwort von CaioToOn oben hatte ich zunächst immer noch Probleme, dies zum Laufen zu bringen.

Nach mehreren Versuchen hat es endlich funktioniert. Ich füge meine endgültige Version hier ein - in der Hoffnung, dass es jemand anderem zugute kommt.

    <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
quelle
Können Sie bitte das Ziel angeben, in Eclipse ausgeführt zu werden?
Jess
1

Ich hatte das gleiche Problem beim Versuch, das Hadoop-Projekt in Eclipse zu laden. Ich habe die oben genannten Lösungen ausprobiert und glaube, dass es in Eclipse Kepler funktioniert haben könnte ... nicht einmal mehr sicher (habe zu viele Dinge ausprobiert).

Bei all den Problemen, die ich hatte, entschied ich mich, zu Eclipse Luna überzugehen, und die oben genannten Lösungen funktionierten bei mir nicht.

In einem anderen Beitrag wurde empfohlen, das ... -Tag in "Paket" zu ändern. Ich habe damit angefangen und es würde die Fehler "beseitigen" ... Ich denke jedoch, dass die Änderungen mich später beißen würden - ich bin kein Experte für Maven.

Zum Glück habe ich herausgefunden, wie man alle Fehler beseitigt. Gehen Sie zu Fenster-> Einstellungen-> Maven-> Fehler / Warnungen und ändern Sie die Option "Plugin-Ausführung nicht vom Lebenszyklus abgedeckt ..." in "Ignorieren". Ich hoffe es hilft.

Myluco
quelle
0

Ich weiß, dass dies ein alter Beitrag ist, aber ich hatte heute auch mit diesem Problem zu kämpfen und habe die Vorlage von dieser Seite verwendet: 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>

und alles funktioniert gut unter m2e1.3.1.

Als ich versuchte zu benutzen

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

Ich habe auch m2eFehler bekommen.

Andna
quelle
Ja, genau das ist der Zweck dieses Eintrags: Für m2e sind jetzt Konnektoren erforderlich , um die Ausführung von Plugins im Eclipse-Build-Lebenszyklus zuzuordnen. <br/> Selbst zum Zeitpunkt meines Kommentars unterstützt m2e nur einige solcher Konnektoren: Sie müssen das lifecycle-mappingMaven-Plugin verwenden, um m2e anzuweisen, wie mit einem nicht unterstützten Plugin umzugehen ist (hier das maven-dependency-plugin)
Olivier B.
0

Eine andere Möglichkeit besteht darin, zur Registerkarte Probleme zu navigieren, mit der rechten Maustaste auf Fehler zu klicken und auf Schnellkorrektur anwenden zu klicken. Sie sollten den XML-Code zum Ignorieren generieren und die POM-Datei für Sie anwenden.

blauer Himmel
quelle