O maven-dependency-plugin (objetivos "copiar-dependências", "descompactar") não é suportado pelo m2e

155

Eu tenho um projeto Maven bastante simples:

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

No entanto, recebo o seguinte erro no 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

Por que me importo se o m2eclipse não "suporta" esta tarefa? Maven faz, e é com isso que realmente me importo. Como posso obter esse erro no meu projeto para desaparecer?

Naftuli Kay
fonte
4
Atualmente, o m2e fornece uma solução rápida para adicionar a configuração apropriada ao seu pom.xml para fazer com que o m2e ignore o objetivo não suportado.
Thorbjørn Ravn Andersen
@ ThorbjørnRavnAndersen, qual é a solução rápida?
Muhammad Gelbana
1
@MuhammadGelbana No Eclipse, uma "solução rápida" significa: coloque o cursor no problema; pressione Ctrl-1; Escolha correção rápida.
Thorbjørn Ravn Andersen

Respostas:

164

Parece ser um problema conhecido. Você pode instruir o m2e a ignorar isso.

Opção 1: pom.xml

Adicione o seguinte dentro da sua <build/>tag:

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

Você precisará executar o Maven ... -> Atualizar a configuração do projeto em seu projeto após isso.

Leia mais: http://wiki.eclipse.org/M2E_plugin_execution_not_covered#m2e_maven_plugin_coverage_status

Opção 2: Substituição Global do Eclipse

Para evitar alterar seus arquivos POM, a substituição de ignorar pode ser aplicada a todo o espaço de trabalho através das configurações do Eclipse.

Salve este arquivo em algum lugar do disco: https://gist.github.com/maksimov/8906462

Na Eclipse/Preferences/Maven/Lifecycle Mappingsprocura para este arquivo e clique em OK:

Configurações do Eclipse

maksimov
fonte
10
E se as dependências de cópia forem uma etapa vital na construção de seu arquivo WAR? Eu estou trabalhando com monstruosidade chamada m2eclipse e mesmo se mudar a ação para executar, os arquivos vitais não são copiados para a pasta de destino ...
bartv
1
Para configurações de ignição geradas automaticamente, o @PhoneTech, m2e adiciona o comentário "A configuração deste plug-in é usada para armazenar apenas as configurações do Eclipse m2e. Não tem influência na construção do Maven." Não tenho certeza do que isso significa, pois você está dizendo que as coisas não são copiadas para você.
Arjan24
6
Sim, ele ajudou ... mas isso é uma enorme quantidade de código apenas para se livrar de um aviso: P
dokaspar
Isso ainda me dá um aviso, mas o erro se foi.
stevecross
57

Este é um problema da execução do plugin M2E for Eclipse M2E não coberto .

Para resolver esse problema, tudo o que você precisa fazer é mapear o ciclo de vida que ele não reconhece e instruir o M2E a executá-lo.

Você deve adicionar isso depois do seu plugins, dentro do build. Isto irá remover o erro e fazer M2E reconhecer o objetivo copy-depenciesde maven-dependency-plugine fazer o trabalho POM como esperado, copiando dependências para a pasta de cada vez Eclipse construí-la. Se você quiser apenas ignorar o erro, altere <execute />para <ignore />. Não há necessidade de incluir o seu maven-dependency-plugindentro pluginManagement, como sugerido anteriormente.

<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
fonte
4
Isso resolve de fato. E eu estava sendo estúpido, pensando que quando as pessoas estavam falando sobre mudar <plugins>- se para <pluginManagement>uma delas deveria realmente mudar a situação <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId>. Mas é sobre o <groupId>org.eclipse.m2e</groupId> <artifactId>lifecycle-mapping</artifactId>que precisa ser incluído <pluginManagement>. Ao usar o Quick Fix no Eclipse, o mesmo é adicionado acima do normal <plugins>e parece que o local também funciona bem. A chave é então mudar <ignore>para <execute>. Agradável.
Arjan24
1
Descobri que eu precisava que <runOnIncremental> false </runOnIncremental> fosse executado conforme recomendado no link que você forneceu. Obrigado pela resposta me colocou no caminho certo.
cyber-monge
Não há necessidade de adicionar isso APÓS o seu pluginsinterior build, você pode adicioná-lo antes.
Fagner Brack
38

Se dependências de cópia, descompactação, pacote etc. são importantes para o seu projeto, você não deve ignorá-lo. Você deve incluir o seu <plugins>in <pluginManagement>testado com o Eclipse Indigo SR1, maven 2.2.1

user311174
fonte
4
Graças, também ajuda no Eclipse Indigo SR2
stemm
1
Estou um pouco perdido ... Isso significa usar o código acima, mas com em <execute />vez de <ignore />? Obrigado!
xverges
1
Gostaria de explicar um pouco mais? Basta colocar um <plugin>em <pluginManagement>mas ainda referência a ele para fazer seu trabalho, ainda me dá o mesmo aviso.
Arjan
@ CaioToOn, talvez você saiba um pouco mais ...? Depois de adicioná-lo <pluginManagement>, ainda preciso adicionar uma linha 2 "regular" <build><plugins><plugin>...também, referenciando a linha configurada <pluginManagement>, certo? (Ainda vendo Juno reclamar sobre a mesma coisa, quando em <pluginManagement>.)
Arjan
@Arjan, você deve anexar sua pluginstag pluginManagement. Mas dê uma olhada na resposta que dei abaixo, stackoverflow.com/a/12109018/179138 . O sugerido ignora a execução, mas não execute o plug-in no Eclipse.
Caio Cunha
16

Para fazê-lo funcionar, em vez de ignorá-lo, você pode instalar o conector m2e para o maven-dependency-plugin:
https://github.com/ianbrandt/m2e-maven-dependency-plugin

Aqui está como você faria isso no Eclipse:

  1. vá para Janela / Preferências / Maven / Discovery /
  2. digite o URL do catálogo: http://download.eclipse.org/technology/m2e/discovery/directory-1.4.xml
  3. clique em Abrir catálogo
  4. escolha o plugin m2e-maven-dependency-plugin
  5. desfrutar
mario
fonte
1
+1 para a resposta certa. Lembre-se de fazer uma pequena edição no pom.xmlarquivo após instalar o plugin, caso contrário, o erro pode não desaparecer.
Fagner Brack
Em Eclipse Luna a URL Catalog é download.eclipse.org/technology/m2e/discovery/directory-1.5.xml
jansohn
Eu tentei isso, mas os campos de URL do catálogo não são editáveis! O meu está definido como: download.eclipse.org/technology/m2e/discovery/directory.xml (ou seja, sem o -1.4) no final. Alguma idéia, como / onde alguém poderia ajustar isso?
Mmo
8

Apesar da resposta do CaioToOn acima, eu ainda tinha problemas para fazer isso funcionar inicialmente.

Após várias tentativas, finalmente funcionou. Estou colando minha versão final aqui - esperando que isso beneficie outra pessoa.

    <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
fonte
Você pode fornecer o objetivo de executar no eclipse?
Jess
1

Eu tive o mesmo problema ao tentar carregar o projeto Hadoop no eclipse. Tentei as soluções acima e acredito que possa ter funcionado no Eclipse Kepler ... nem tenho mais certeza (tentei muitas coisas).

Com todos os problemas que eu estava tendo, decidi seguir para o Eclipse Luna, e as soluções acima não funcionaram para mim.

Havia outro post que recomendava alterar a tag ... para o pacote. Comecei a fazer isso e isso "esclareceria" os erros ... No entanto, começo a pensar que as mudanças me afetariam mais tarde - não sou especialista em Maven.

Felizmente, descobri como remover todos os erros. Vá para Janela-> Preferências-> Maven-> Erro / Avisos e altere a opção "Execução de plug-in não coberta pelo ciclo de vida ..." para "Ignorar". Espero que ajude.

Myluco
fonte
0

Eu sei que esse post é antigo, mas também lutei hoje com esse problema e usei o modelo desta página: 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>

e tudo funciona bem sob m2e1.3.1.

Quando tentei usar

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

Eu também tenho m2eerro.

Andna
fonte
Sim, esse é exatamente o objetivo desta entrada: o m2e agora requer conectores para mapear as execuções de plug-ins no ciclo de vida da construção do Eclipse. <br/> Mesmo no momento em que escrevi meus comentários, o m2e suporta apenas alguns desses conectores: você precisa usar o lifecycle-mappingplug-in Maven para instruir o m2e como lidar com um plug-in não suportado (aqui o maven-dependency-plugin)
Olivier B.
0

Outra opção é navegar para a guia problemas, clique com o botão direito do mouse em erro, clique em aplicar correção rápida. O deve gerar o código xml ignorar e aplicá-lo .pom para você.

céu azul
fonte