如何映射 Eclipse m2e 插件未涵盖的 Maven 生命周期阶段?

Posted

技术标签:

【中文标题】如何映射 Eclipse m2e 插件未涵盖的 Maven 生命周期阶段?【英文标题】:How can I map Maven lifecycle phases not covered by the Eclipse m2e plugin? 【发布时间】:2015-07-15 19:12:09 【问题描述】:

我在 Mac 10.9.5 上使用 Eclipse Kepler。我已经使用 m2e Eclipse 插件导入了许多 Maven 项目。所有这些项目都是父 pom 的子项目。当我查看各个子 pom.xml 文件中的“概述”时,我看到了如下内容:

Plugin execution not covered by lifecycle configuration: org.codehaus.mojo:properties-maven-plugin:1.0-alpha-2:write-project-properties (execution: default, phase: process-resources)

我希望 Eclipse 在适当的时间执行这些生命周期阶段,但我不知道该怎么做。当我选择 Eclipse 的建议时……

Permanently mark goal write-project-properties in pom.xml as ignore

当提示“选择要放置忽略的位置”时,我选择了父 pom.xml 文件,但是,当我在 Eclipse 编辑器中查看子 pom.xml 文件时,错误并没有消失。如何映射 m2e 未涵盖的生命周期阶段?

编辑:

根据答案,我去了 Eclipse -> Preferences -> Maven -> Lifecycle Mappings,点击“Open Workspace Lifecycle Mappings Metadata”,并按照建议编辑了文件...

<?xml version="1.0" encoding="UTF-8"?>
<lifecycleMappingMetadata>
    <pluginExecutions>
        <pluginExecution>
            <pluginExecutionFilter>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>xmlbeans-maven-plugin</artifactId>
                <versionRange>2.3.3</versionRange>
                <goals>
                    <goal>xmlbeans</goal>
                </goals>
            </pluginExecutionFilter>
            <action>
                <ignore />
            </action>
        </pluginExecution>
        <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>
                <execute />
            </action>
        </pluginExecution>
    </pluginExecutions>
</lifecycleMappingMetadata>

即使重启 Eclipse 后,当我打开一个子 pom.xml 文件时,“生命周期配置未涵盖插件执行”错误仍然存​​在。

【问题讨论】:

我想你可以在这个问题/答案中找到答案:***.com/questions/6352208/… 我没有使用 aspectj-maven-plugin。 【参考方案1】:

M2Eclipse(Eclipse 的 Maven 集成插件)正在将 Maven 的默认 phases 和 goals 映射并执行到内部 Eclipse 构建工作流中。

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

[...] 需要明确说明如何处理绑定到项目构建生命周期的“有趣”阶段 [...] 的所有 Maven 插件。我们将这些指令称为“项目构建生命周期映射”或简称为“生命周期映射”,因为它们定义了 m2e 如何在 Eclipse 工作区构建期间将信息从项目 pom.xml 文件映射到 Eclipse 工作区项目配置和行为。

可以在每个项目或全局 Eclipse 安装中解决此错误。

项目构建生命周期映射可以在项目的 pom.xml 中配置,由 Eclipse 插件贡献,或者默认为 m2e 附带的常用 Maven 插件。我们将这些称为“生命周期映射元数据源”。

全局 Eclipse 设置文件名为 lifecycle-mapping-metadata.xml,可通过 Maven 设置对话框 [1] 中的“生命周期映射”进行配置。

M2Eclipse 使用插件 groupId、artifactId、版本范围和目标的组合将插件执行与操作相匹配。可以指示 M2Eclipse 执行插件执行三个基本操作 - ignoreexecute 和委托给项目配置器。

[...]

ignore 选项,顾名思义,告诉 M2Eclipse 静默忽略插件执行。

[...]

execute 选项告诉 m2e 作为 Eclipse 工作区完整或增量构建的一部分执行操作。

委托给项目配置器表示 Eclipse Marketplace 中有适配器 Eclipse 插件。适配器插件以更特定于 Maven 插件的方式执行 phases 和 goals

真正的设置(XML 结构)并不直观,但在上面的链接中有所描述。

在您的情况下,lifecycle-mapping-metadata.xml 将如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<lifecycleMappingMetadata>
  <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>
[...]
  </pluginExecutions>
</lifecycleMappingMetadata>

ProTip:你有没有更多的项目并且一直在使用一组 Maven 插件,在 SCM(git、svn、cvs ...)中移动 lifecycle-mapping-metadata.xml

编辑

添加插件的所有目标,可能还添加其他插件以避免这些错误。仔细阅读错误消息以了解其他 goals 或插件。

在对lifecycle-mapping-metadata.xml 进行任何保存更改后,您必须重新加载 Maven 设置对话框[1] 中的内容并更新工作区中所有基于 Maven 的项目。

在工作区中的 Maven 项目上单击鼠标右键,然后选择 Maven > Update Projects ...。选择/所有 Maven 项目并激活以下复选框:

从 pom.xml 更新项目配置 从本地文件系统刷新工作区资源 清洁项目

编辑

[1] Maven 设置对话框位于 File > Window > Preferences > Maven > Lifecycle Mappings 直到 Exclipse Oxygen。

【讨论】:

我编辑了我的问题,以显示当我按照您的建议编辑文件时发生了什么(我输入“执行”而不是“忽略”)。但“生命周期未涵盖插件”错误仍然存​​在。 是完全相同的错误还是不同的目标?您必须添加所有未映射的目标,也许还有其他插件。 @barthel ProTip ... 将生命周期映射元数据.xml 放在哪里? / 或 /src 或在哪里? @PeterRader 对于多个项目,请使用eclipse-settings 或类似的专用项目,并按上述方式进行配置。也可以将生命周期设置包含到 POM 文件中。看看:eclipse.org/m2e/documentation/… @barthel 好的,谢谢扩展!我很抱歉给您带来麻烦。在 Java 中,我经常发现不好的答案,这让我对它们有点敏感。

以上是关于如何映射 Eclipse m2e 插件未涵盖的 Maven 生命周期阶段?的主要内容,如果未能解决你的问题,请参考以下文章

如何禁用 M2E 生命周期验证

如何在 Eclipse Indigo 中禁用 m2e 构建?

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

Eclipse插件开发MavenArchetype

什么是eclipse的m2e

生命周期配置未涵盖插件执行:org.apache.maven.plugins:maven-toolchains-plugin:1.1:toolchain