ChatGPT解决这个技术问题 Extra ChatGPT

生命周期配置未涵盖插件执行(JBossas 7 EAR 原型)

我正在使用带有 Maven M2E 插件 1.0.100 的 Eclipse 3.7 Indigo。

使用 JBoss 7.x JavaEE 6 EAR 原型,EAR 的 pom 给了我这个错误:

生命周期配置未涵盖插件执行:org.apache.maven.plugins:maven-ear-plugin:2.6:generate-application-xml(执行:default-generate-application-xml,阶段: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>

K
Koopakiller

这是前段时间介绍的 M2E 插件的“功能”。它与 JBoss EAR 插件没有直接关系,但也发生在大多数其他 Maven 插件中。

如果您在 pom 中定义了插件执行(如 maven-ear-plugin:generate-application-xml 的执行),您还需要为 M2E 添加额外的配置信息,告诉 M2E 在 Eclipse 中运行构建时要做什么,例如插件应该执行被 M2E 忽略或执行,如果它也用于增量构建,......如果缺少该信息,M2E 通过显示以下错误消息来抱怨它:

“生命周期配置未涵盖插件执行”

有关更详细的说明和一些需要添加到 pom 以使该错误消失的示例配置,请参见此处:

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


@Jan 我不明白这个概念。 M2E 应该对用户透明。做命令行 Maven 所做的事情,但是在 eclipse 中。 pom 配置数据中不应该有告诉 M2E 做什么。如果是这样,那么这是一个糟糕的设计。顺便说一句,这些错误有时会在较新版本的 Eclipse 和 M2E 中消失。
我同意全神贯注。我的 POM 不依赖于 m2e,我现在想添加一个,因为我碰巧使用 Eclipse 作为我的 IDE。这对从事同一项目的其他人来说是一种负担,这些人很可能正在使用另一个 IDE,例如 IntelliJ。如果 m2e 需要这些提示,那么它应该是 Eclipse 中 m2e 配置的一部分。
有些目标在 Eclipse 中没有意义。例如,我有将 ZIP 文件解压缩到 target 文件夹的项目。您不希望在保存每个源文件时“增量”地重新完成。或者也许你确实想要那个。真的,m2e 不知道您的具体构建。您可以在 Eclipse、POM 中存储 m2e 应该执行的操作,或者可能安装一个 m2e 连接器,为 m2e 添加更多知识以处理构建步骤。这些是您应该看到的选项。我了解您不想让您的 POM m2e 感知,但这是为您的所有开发人员集中配置它的好地方。
问题是这个链接的文档,就像 Maven 或 Eclipse 上的大多数文档一样。是abcacadabra。无论他们多么努力地解释清楚,解释都建立在我作为一个相对较新的 Maven 用户不理解也不知道如何查找的太多概念上——我发现的所有东西都有同样的问题:太多无法解释概念。技术太复杂或文档组织太差。无论如何,学习曲线都很高。这里的答案增加了很多清晰度。
@RicardoGladwell您误解了投票的目的。箭头说“这个答案没有用” - 这个答案是不正确的。因此,即使您不喜欢写此答案的语气,也不需要反对。
j
java_newbie

无论如何为时已晚,但我的解决方案很简单,右键单击 Eclipse 中的错误消息,然后选择 Quick Fix >> Ignore for each pom with such errors


不算太晚。我就是这样解决问题的!
我也是。所有这些研究并试图了解问题所在让我很头疼,所以我忽略了它:) 谢谢。
这对我有用。我怀疑它会自动生成@Jan 的答案所描述的指向 eclipse.org/m2e/documentation/m2e-execution-not-covered.html 的内容,因为我在接受快速修复后看到的唯一变化是对我的 pom.xml 的更改。
我在另一台机器上再次尝试,当我从 JBehave 3.9.4 升级到 3.9.5 时,问题消失了,因为它是 JBehave 插件,在我的情况下,这导致了错误(我从 JBehave Maven 原型生成了插件配置( jbehave.org/reference/stable/archetypes.html))
c
coderplus

Eclipse 有增量构建的概念。这非常有用,因为它可以节省大量时间。

这有什么用

假设您刚刚更改了一个 .java 文件。增量构建器将能够编译代码而无需重新编译所有内容(这将花费更多时间)。

现在 Maven 插件有什么问题

大多数 maven 插件不是为增量构建而设计的,因此会给 m2e 带来麻烦。 m2e 不知道插件目标是至关重要的还是无关紧要的。如果它只是在单个文件更改时执行每个插件,那将需要很多时间。

这就是为什么 m2e 依赖元数据信息来确定应该如何处理执行的原因。 m2e 提供了不同的选项来提供此元数据信息,优先顺序如下(从高到低)

项目父、祖父等的 pom.xml 文件 pom.xml 文件 [m2e 1.2+] 工作区首选项已安装 m2e 扩展 [m2e 1.1+] maven 插件提供的生命周期映射元数据 m2e 附带的默认生命周期映射元数据

1,2 是指在 pom 文件或其任何父文件的标签中指定 pluginManagement 部分。 M2E 读取此配置以配置项目。以下代码段指示 m2e 忽略 yuicompressor-maven-plugin 的 jslintcompress 目标

<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) 如果您不希望使用此元数据污染您的 pom 文件,您可以将其存储在外部 XML 文件中(选项 3)。下面是一个示例映射文件,它指示 m2e 忽略 yuicompressor-maven-plugin 的 jslintcompress 目标

<?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) 如果您不喜欢这 3 个选项中的任何一个,您可以为 maven 插件使用 m2e 连接器(扩展)。连接器将依次向 m2e 提供元数据。您可以在此 link 中查看连接器内的元数据信息示例。您可能已经注意到元数据指的是配置器。这仅仅意味着 m2e 将把责任委托给扩展作者提供的特定 java 类。配置器可以配置项目(比如添加额外的源文件夹等)并决定是否在增量构建期间执行实际的 maven 插件(如果没有在配置器中正确管理,它可能导致无休止的项目构建)

请参阅这些链接以获取配置器 (link1,link2) 的示例。因此,如果插件可以通过外部连接器进行管理,那么您可以安装它。 m2e 维护其他开发人员贡献的此类连接器的列表。这称为发现目录。如果您还没有通过任何选项(1-6)执行的任何生命周期映射元数据,m2e 将提示您安装连接器,并且发现目录有一些可以管理执行的扩展。

https://i.stack.imgur.com/ZbWEa.png

5)m2e 鼓励插件作者在 maven-plugin 本身内支持增量构建和提供生命周期映射。这意味着用户不必使用任何额外的生命周期映射或连接器。一些插件作者有 already implemented this

6) 默认情况下,m2e 保存大多数常用插件(如 maven-compiler-plugin 等)的生命周期映射元数据。

现在回到问题:您可能只为给您带来麻烦的特定目标在 1、2 或 3 中提供忽略生命周期映射。


m
mgobeil

一个很好的解决方法是提醒您可以更好地配置 m2e,而项目不会继承误报错误标记,只需将这些错误降级为警告:

窗口 -> 首选项 -> Maven -> 错误/警告 -> 生命周期配置未涵盖插件执行 = 警告


J
Jitendra Vispute

我试图在清理后立即执行特定的堵塞,即清理后(默认为清理阶段)。这对我来说适用于日食靛蓝。刚刚添加 post-clean 为我解决了这个问题。

<executions>
  <execution>
    <configuration>
    </configuration>
   <phase>post-clean</phase>
    <goals>
      <goal>update-widgetset</goal>
    </goals>
  </execution>
</executions> 

你能解释一下为什么会这样吗? “刚刚添加”和“为我解决”并没有真正增加我对它没有不需要的隐藏行为的信任。
果然,给我的 pom.xml 中的 execution 有一个 phase 和一个 goal,但我仍然得到错误。
绅士们——我很抱歉。我不是专家,想帮助一些寻求快速解决方案的人。不过,我应该给出更多的见解。我认为这里的诀窍是包含执行阶段。由于 mojo 可以定义执行阶段,因此我尝试在清理后立即执行特定的插入,即清理后(默认为清理阶段)。这对我来说适用于日食靛蓝。可能特定插件可能使用了主 pom 中的一些依赖项? IIRC 这是基于 Vaadin 的插件。
a
aeros

通过应用此解决方案,我能够在 Eclipse Kepler 4.3 中解决与 maven-antrun-plugin 和 jaxb2-maven-plugin 相同的问题:http://wiki.eclipse.org/M2E_plugin_execution_not_covered#Eclipse_4.2_add_default_mapping
所以我的 %elipse_workspace_name%/.metadata/.plugins/ 的内容org.eclipse.m2e.core/lifecycle-mapping-metadata.xml 如下:

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

*必须重新启动 Eclipse 才能看到错误消失。


R
Ricardo Gladwell

Maven Eclipse (m2e) 0.12 版开始,所有 Maven 生命周期目标都必须映射到已安装的 m2e 扩展。在这种情况下,maven-ear-plugin 有一个未映射的目标 default-generate-application-xml

您只需按照此处的说明即可排除未映射的生命周期目标:

https://wiki.eclipse.org/M2E_plugin_execution_not_covered

或者,只需右键单击 Eclipse 中的错误消息并选择 Quick Fix ->; Ignore for every pom with such errors

忽略生命周期目标时应该小心:通常目标会做一些有用的事情,如果您将它们配置为在 Eclipse 中忽略,您可能会错过重要的构建步骤。您可能还想考虑为未映射的生命周期目标添加对 Maven Eclipse EAR 扩展的支持。


S
StaticNoiseLog

使用 Jan 的答案中解释的机制,我已指示 m2e 插件忽略目标“generate-application-xml”。这消除了错误并且似乎可以工作,因为 m2e 创建了 application.xml。

所以基本上这个错误迫使我们决定当 Maven 构建在 m2e 插件的控制下在 Eclipse 中运行时负责生成 application.xml 的机制。我们已经决定由 m2e 负责。

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

D
Daniel Serodio

您需要了解M2E_plugin_execution_not_covered中的内容并按照以下步骤进行操作:

从 eclipse 插件文件夹中选择 org.eclipse.m2e.lifecyclemapping.defaults jar

提取它并打开生命周期映射元数据.xml,您可以在其中找到所有 pluginExecutions。

添加插件的 pluginExecutions,这些插件在 标签下显示为带有 的错误。

例如:对于 write-project-properties 错误,请在生命周期映射元数据.xml 文件的 <pluginExecutions> 部分下添加此代码段:

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

替换 JAR 中的 XML 文件

替换 Eclipse 插件文件夹中更新的 JAR

重启 Eclipse

对于任何项目,您将来都应该看不到任何错误。


W
William Kinaan

即使这个问题太老了,但我想分享对我有用的解决方案,因为当涉及到这个错误时,我已经检查了所有内容。这很痛苦,我花了两天时间尝试,最后解决方案是:

在eclipse中更新M2e插件

清理并重新构建