如何映射 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 的默认 phase
s 和 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 执行插件执行三个基本操作 - ignore、execute 和委托给项目配置器。
[...]
ignore 选项,顾名思义,告诉 M2Eclipse 静默忽略插件执行。
[...]
execute 选项告诉 m2e 作为 Eclipse 工作区完整或增量构建的一部分执行操作。
委托给项目配置器表示 Eclipse Marketplace 中有适配器 Eclipse 插件。适配器插件以更特定于 Maven 插件的方式执行 phase
s 和 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
。
编辑
添加插件的所有目标,可能还添加其他插件以避免这些错误。仔细阅读错误消息以了解其他 goal
s 或插件。
在对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 生命周期阶段?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Eclipse Indigo 中禁用 m2e 构建?
生命周期配置未涵盖插件执行(JBossas 7 EAR 原型)
生命周期配置未涵盖插件执行:org.apache.maven.plugins:maven-toolchains-plugin:1.1:toolchain