Execução de plug-in não coberta pela configuração do ciclo de vida (arquétipo do JBossas 7 EAR)

123

Estou usando o Eclipse 3.7 Indigo com o Maven M2E Plugin 1.0.100.

Usando o arquétipo JBoss 7.x JavaEE 6 EAR, o pom para EAR está me dando este erro:

Execução de plug-in não coberta pela configuração do ciclo de vida: org.apache.maven.plugins: maven-ear-plugin: 2.6: generate-application-xml (execução: default-generate-application-xml, fase: generate-resources)

<plugin>
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-ear-plugin</artifactId>
   <version>2.6</version>
   <configuration>
      <!-- Tell Maven we are using Java EE 6 -->
      <version>6</version>
      <!-- Use Java EE ear libraries as needed. Java EE ear libraries 
                  are in easy way to package any libraries needed in the ear, and automatically 
                  have any modules (EJB-JARs and WARs) use them -->
      <defaultLibBundleDir>lib</defaultLibBundleDir>
      <modules></modules>
   </configuration>
<plugin>
Oh Chin Boon
fonte

Respostas:

138

Este é um "recurso" do plugin M2E que foi introduzido há um tempo atrás. Não está diretamente relacionado ao plug-in JBoss EAR, mas também acontece com a maioria dos outros plug-ins do Maven.

Se você tiver uma execução de plug-in definida em pom(como a execução de maven-ear-plugin:generate-application-xml), você também precisará adicionar informações adicionais de configuração para o M2E que digam ao M2E o que fazer quando a construção for executada no Eclipse, por exemplo, se a execução do plug-in for ignorada ou executada por M2E, isso também deve ser feito para compilações incrementais, ... Se essas informações estiverem ausentes, o M2E reclamará disso, mostrando esta mensagem de erro:

"Execução de plug-in não coberta pela configuração do ciclo de vida"

Veja aqui uma explicação mais detalhada e algumas configurações de amostra que precisam ser adicionadas ao pom para que esse erro ocorra:

https://www.eclipse.org/m2e/documentation/m2e-execution-not-covered.html

Jan
fonte
70
@ Jan Eu não entendo o conceito. O M2E deve ser transparente para o usuário. Faça o que a linha de comando Maven faz, mas de dentro do eclipse. Não deve haver nos dados de configuração do pom para dizer ao M2E o que fazer. Se isso acontecer, é um design ruim. BTW, esses erros às vezes desaparecem nas versões mais recentes do Eclipse e do M2E.
extasiada
8
Eu concordo com extasiado. Meu POM não depende de m2e e eu gostaria de adicionar um agora apenas porque estou usando o Eclipse como meu IDE. Isso é importante para outras pessoas que trabalham no mesmo projeto que pode estar usando outro IDE, como o IntelliJ. Se o m2e precisar dessas dicas, ele deverá fazer parte da configuração do m2e no Eclipse.
William
12
Alguns objetivos não fazem sentido enquanto estiver no Eclipse. Por exemplo, tenho projetos em que os arquivos ZIP são descompactados para a targetpasta. Você não gostaria que isso fosse repetido "de forma incremental" ao salvar cada arquivo de origem. Ou talvez você não quer isso. Realmente, o m2e não tem idéia sobre sua compilação específica. É possível armazenar o que o m2e deve fazer no Eclipse, POM ou, possivelmente, instalar um conector do m2e que inclua mais conhecimento no m2e para lidar com a etapa de construção. Estas são as opções que você deve ver. Entendo que você não quer deixar seu POM m2e ciente, mas é um bom lugar para configurar isso centralmente para todos os seus desenvolvedores.
Sander Verhagen
3
O problema é que a documentação vinculada para isso, como a maioria da documentação no Maven ou Eclipse. é abcacadabra. Por mais que tentem explicar claramente, a explicação se baseia em muitos conceitos que eu, como usuário relativamente novo do Maven, não entendo e não sei como procurar - tudo o que acho tem o mesmo problema: muitos inexplicáveis conceitos. A tecnologia é muito complexa ou a documentação é muito mal organizada. De qualquer forma, a curva de aprendizado é alta. As respostas aqui acrescentam muita clareza.
reinierpost
10
@RicardoGladwell Você entendeu mal o objetivo dos votos negativos. A seta diz "esta resposta não é útil" - e isso não é verdade. Portanto, mesmo que você não goste do tom com o qual esta resposta está escrita, o voto negativo foi desnecessário.
Dawood ibn Kareem
43

mesmo assim, é tarde demais, mas minha solução foi simples, clique com o botão direito do mouse na mensagem de erro no Eclipse e escolha Quick Fix >> Ignore para cada pom com esses erros

java_newbie
fonte
3
Não é tão tarde. Eu apenas resolvi o problema dessa maneira!
reinierpost
2
Eu também. Toda essa pesquisa e tentando entender qual era o problema me deu dor de cabeça, então eu a ignorei :) Obrigado.
dleerob
1
Isso funcionou para mim. Eu suspeito que ele gera automaticamente o que é descrito pela resposta de @ Jan que aponta para eclipse.org/m2e/documentation/m2e-execution-not-covered.html porque a única alteração que vi depois que aceitei a solução rápida foi uma alteração no meu pom. xml.
Michael Osofsky
Tentei novamente em outra máquina e o problema desapareceu quando atualizei do JBehave 3.9.4 para 3.9.5, pois era o plugin JBehave, no meu caso, que estava criando o erro (eu gerara a configuração do plug-in a partir de um arquétipo do JBehave Maven ( jbehave.org/reference/stable/archetypes.html ))
Michael Osofsky
30

O Eclipse tem o conceito de compilações incrementais, o que é incrivelmente útil, pois economiza muito tempo.

Como isso é útil

Digamos que você acabou de alterar um único arquivo .java. Os construtores incrementais poderão compilar o código sem precisar recompilar tudo (o que levará mais tempo).

Agora, qual é o problema com os plug-ins do Maven

A maioria dos plugins maven não é projetada para compilações incrementais e, portanto, cria problemas para o m2e. O m2e não sabe se o objetivo do plugin é algo crucial ou irrelevante. Se ele apenas executar todos os plug-ins quando um único arquivo for alterado, levará muito tempo.

Essa é a razão pela qual o m2e depende de informações de metadados para descobrir como a execução deve ser tratada. O m2e criou opções diferentes para fornecer essas informações de metadados e a ordem de preferência é a seguinte (do maior para o menor)

  1. arquivo pom.xml do projeto
  2. arquivos pai, avô e assim por diante pom.xml
  3. Preferências do espaço de trabalho [m2e 1.2+]
  4. extensões m2e instaladas
  5. [m2e 1.1+] metadados de mapeamento do ciclo de vida fornecidos pelo plugin maven
  6. metadados de mapeamento de ciclo de vida padrão enviados com m2e

1,2 refere-se à especificação da seção pluginManagement na tag do seu arquivo pom ou de qualquer um dos pais. O M2E lê essa configuração para configurar o projeto. O snippet abaixo instrui o m2e a ignorar os objetivos jslinte compressdo yuicompressor-maven-plugin

<pluginManagement>
        <plugins>
            <!--This plugin's configuration is used to store Eclipse m2e settings 
                only. It has no influence on the Maven build itself. -->
            <plugin>
                <groupId>org.eclipse.m2e</groupId>
                <artifactId>lifecycle-mapping</artifactId>
                <version>1.0.0</version>
                <configuration>
                    <lifecycleMappingMetadata>
                        <pluginExecutions>
                            <pluginExecution>
                                <pluginExecutionFilter>
                                    <groupId>net.alchim31.maven</groupId>
                                    <artifactId>yuicompressor-maven-plugin</artifactId>
                                    <versionRange>[1.0,)</versionRange>
                                    <goals>
                                        <goal>compress</goal>
                                        <goal>jslint</goal>
                                    </goals>
                                </pluginExecutionFilter>
                                <action>
                                    <ignore />
                                </action>
                            </pluginExecution>
                        </pluginExecutions>
                    </lifecycleMappingMetadata>
                </configuration>
            </plugin>
        </plugins>
    </pluginManagement>

3) Caso você não prefira poluir seu arquivo pom com esses metadados, você pode armazená-lo em um arquivo XML externo (opção 3). Abaixo está um arquivo de mapeamento de amostra que instrui o m2e a ignorar os objetivos jslinte compressdo yuicompressor-maven-plugin

<?xml version="1.0" encoding="UTF-8"?>
<lifecycleMappingMetadata>
    <pluginExecutions>
        <pluginExecution>
            <pluginExecutionFilter>
                <groupId>net.alchim31.maven</groupId>
                <artifactId>yuicompressor-maven-plugin</artifactId>
                <versionRange>[1.0,)</versionRange>
                <goals>
                    <goal>compress</goal>
                    <goal>jslint</goal>
                </goals>
            </pluginExecutionFilter>
            <action>
                <ignore/>
            </action>
        </pluginExecution>
    </pluginExecutions>
</lifecycleMappingMetadata>

4) Caso não goste de nenhuma dessas três opções, você pode usar um conector m2e (extensão) para o plug-in maven. O conector, por sua vez, fornecerá os metadados para m2e. Você pode ver um exemplo das informações de metadados em um conector neste link . Você deve ter notado que os metadados se referem a um configurador. Isso significa simplesmente que o m2e delegará a responsabilidade para essa classe java específica fornecida pelo autor da extensão. O configurador pode configurar o projeto (como, por exemplo, adicionar pastas de origem adicionais, etc.) e decidir se deve executar o plugin real do maven durante uma construção incremental (se não gerenciado adequadamente dentro do configurador, pode levar a inúmeras compilações de projetos)

Consulte esses links para obter um exemplo do configurador ( link1 , link2 ). Portanto, caso o plug-in seja algo que possa ser gerenciado através de um conector externo, você poderá instalá-lo. O m2e mantém uma lista desses conectores contribuídos por outros desenvolvedores. Isso é conhecido como catálogo de descoberta. O m2e solicitará que você instale um conector se você ainda não possui nenhum metadado de mapeamento do ciclo de vida para a execução através de qualquer uma das opções (1-6) e o catálogo de descoberta possui alguma extensão que pode gerenciar a execução.

A imagem abaixo mostra como o m2e solicita que você instale o conector para o plugin build-helper-maven-plugin. conector de instalação sugerido no catálogo de descoberta.

5) M2e encoraja os autores de plugins para suportar compilação incremental e mapeamento do ciclo de vida de alimentação dentro dos itself.This-plugin Maven significaria que os usuários não terão que usar os mapeamentos de ciclo de vida adicionais ou connectors.Some plugin de autores já implementado este

6) Por padrão, o m2e mantém os metadados de mapeamento do ciclo de vida da maioria dos plug-ins comumente usados, como o maven-compiler-plugin e muitos outros.

Agora, de volta à pergunta: você provavelmente pode apenas fornecer um mapeamento de ciclo de vida ignorado em 1, 2 ou 3 para o objetivo específico que está criando problemas para você.

coderplus
fonte
14

Uma boa solução para lembrá-lo de que o m2e poderia ser melhor configurado, sem o projeto herdar um marcador de erro falso positivo, é apenas fazer o downgrade desses erros para avisos:

Janela -> Preferências -> Maven -> Erros / Avisos -> Execução de plug-in não coberta pela configuração do ciclo de vida = Aviso

mgobeil
fonte
12

Tentei executar o plugging específico logo após a limpeza, ou seja, pós-limpeza (o padrão é fase limpa). Isso funcionou para mim com o eclipse indigo. Acabei de adicionar o pós-limpeza resolvido o problema para mim.

<executions>
  <execution>
    <configuration>
    </configuration>
   <phase>post-clean</phase>
    <goals>
      <goal>update-widgetset</goal>
    </goals>
  </execution>
</executions> 
Charith De Silva
fonte
11
Você poderia explicar por que isso funciona? "Acabou de adicionar" e "resolvido para mim" não aumenta realmente minha confiança em não ter comportamentos ocultos indesejados.
Kissaki
Com certeza, eu tenho um phasee um goalpara o executionpom.xml que me foi fornecido e ainda recebo o erro.
reinierpost
Senhores - minhas desculpas. Eu não sou um especialista experiente, queria ajudar alguém1 em busca de uma solução rápida. Eu deveria ter dado mais informações, no entanto. Eu acho que o truque aqui é a inclusão da fase de execução. Como o mojo pode definir com as fases de execução, tentei executar o plugging específico logo após a limpeza, ou seja, pós-limpeza (o padrão é a fase limpa). Isso funcionou para mim com o eclipse indigo. Provavelmente plugin específico pode ter usado algumas dependências do pom principal? IIRC este foi o plugin baseado em Vaadin.
Charith De Silva
2

Consegui resolver o mesmo problema com o maven-antrun-plugin e o jaxb2-maven-plugin no Eclipse Kepler 4.3, aplicando esta solução: http://wiki.eclipse.org/M2E_plugin_execution_not_covered#Eclipse_4.2_add_default_mapping
Portanto, o conteúdo do meu% elipse_workspace_name% /. metadata / .plugins / org.eclipse.m2e.core / lifecycle-mapping-metadata.xml é o seguinte:

<?xml version="1.0" encoding="UTF-8"?>
<lifecycleMappingMetadata>
  <pluginExecutions>
    <pluginExecution>
      <pluginExecutionFilter>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-antrun-plugin</artifactId>
        <versionRange>1.3</versionRange>
        <goals>
          <goal>run</goal>
        </goals>
      </pluginExecutionFilter>
      <action>
        <ignore />
      </action>
    </pluginExecution>
    <pluginExecution>
      <pluginExecutionFilter>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>jaxb2-maven-plugin</artifactId>
        <versionRange>1.2</versionRange>
        <goals>
          <goal>xjc</goal>
        </goals>
      </pluginExecutionFilter>
      <action>
        <ignore />
      </action>
    </pluginExecution>
  </pluginExecutions>
</lifecycleMappingMetadata>

* Teve que reiniciar o Eclipse para ver os erros desaparecidos.

Eros
fonte
1

No Maven Eclipse (m2e) versão 0.12, todos os objetivos do ciclo de vida do Maven devem mapear para uma extensão m2e instalada. Nesse caso, o maven-ear-pluginobjetivo era não mapeado default-generate-application-xml.

Você pode excluir metas de ciclo de vida não mapeadas simplesmente seguindo as instruções aqui:

https://wiki.eclipse.org/M2E_plugin_execution_not_covered

Como alternativa, basta clicar com o botão direito do mouse na mensagem de erro no Eclipse e escolher Quick Fix-> Ignore for every pom with such errors.

Você deve ter cuidado ao ignorar os objetivos do ciclo de vida: normalmente, os objetivos fazem algo útil e, se você os configurar para serem ignorados no Eclipse, poderá perder etapas importantes de construção. Você também pode considerar adicionar suporte à extensão EAR do Maven Eclipse para o objetivo do ciclo de vida não mapeado.

Ricardo Gladwell
fonte
0

Com o mecanismo explicado na resposta de Jan, instruí o plug-in m2e a ignorar o objetivo "generate-application-xml". Isso elimina o erro e parece funcionar, pois o m2e cria o application.xml.

Então, basicamente, o erro nos forçou a decidir qual mecanismo é responsável pela geração do application.xml quando a compilação do Maven é executada no Eclipse sob o controle do plugin m2e. E nós decidimos que m2e está no comando.

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-ear-plugin</artifactId>
            <version>2.6</version>
            <configuration>
                <version>6</version>
                <defaultLibBundleDir>lib</defaultLibBundleDir>
            </configuration>
        </plugin>
    </plugins>
    <pluginManagement>
        <plugins>
            **<!-- This plugin's configuration is used to store Eclipse m2e settings 
                only. It has no influence on the Maven build itself. -->
            <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-ear-plugin</artifactId>
                                    <versionRange>[2.1,)</versionRange>
                                    <goals>
                                        <goal>generate-application-xml</goal>
                                    </goals>
                                </pluginExecutionFilter>
                                <action>
                                    <ignore></ignore>
                                </action>
                            </pluginExecution>
                        </pluginExecutions>
                    </lifecycleMappingMetadata>
                </configuration>
            </plugin>**
        </plugins>
    </pluginManagement>
</build>
StaticNoiseLog
fonte
0

Você precisa entender o conteúdo em M2E_plugin_execution_not_covered e seguir as etapas mencionadas abaixo:

  • Escolha o jar org.eclipse.m2e.lifecyclemapping.defaults na pasta do plugin do eclipse
  • Extraia-o e abra o lifecycle-mapping-metadata.xml onde você pode encontrar todas as execuções de plugins.
  • Adicione o pluginExecutions dos seus plugins, que são mostrados como erros com as tags <ignore/>under <action>.

por exemplo: para erro de gravação-projeto-propriedades, inclua esse trecho na <pluginExecutions>seção do arquivo lifecycle-mapping-metadata.xml:

 <pluginExecution>
    <pluginExecutionFilter>
       <groupId>org.codehaus.mojo</groupId>
       <artifactId>properties-maven-plugin</artifactId>
       <versionRange>1.0-alpha-2</versionRange>
       <goals>
         <goal>write-project-properties</goal>
       </goals>
    </pluginExecutionFilter>
     <action>
       <ignore />
     </action>
   </pluginExecution>
  • Substitua esse arquivo XML no JAR
  • Substitua o JAR atualizado na pasta de plug-in do Eclipse
  • Reinicie o Eclipse

Você não verá erros no futuro para nenhum projeto.

Gowtham
fonte
0

Embora a pergunta seja muito antiga, eu gostaria de compartilhar a solução que funcionou para mim porque já verifiquei tudo quando se trata desse erro. Foi uma dor, passei dois dias tentando e no final a solução foi:

atualize o plugin M2e no eclipse

limpe e construa novamente

William Kinaan
fonte