M2Eclipse Plugin Execution Not Covered

Maven项目在构造(build)过程中分很多阶段(phase),每个阶段都有特定的目标(goal)会执行。M2Eclipse 0.12和早期版本就定义了在eclipse中Maven项目各个阶段需要执行的目标。Plugin execution not covered错误的产生是因为设置的插件执行(goal)没有在映射元数据源(mapping metadata sources)中找到对应的生命周期映射行为(是执行呢?还是不执行?),也就是说这个m2e不知道要不要执行这个goal。

这些goals有些配置在工作空间(workspace)级别,有些在project/.settings中。但 问题是这些 goals 并不是对所有的项目都有效,因此我们以前不得不需要刷新或更新依赖关系,更新配置和重新构造,使项目达到一个良好的状态。

而导致这些问题的原因主要有两个:

1.        Maven插件构造了一些不在工作空间(workspace)的资源,有些情况下项目没问题,有些情况下则会认为是资源缺失;

2.        Maven插件导致的JVM和OS的资源泄露也可能导致这些问题。

生命周期映射

为了解决goals失效导致的问题,从M2Eclipse 1.0开始,使用了一个叫项目构造生命周期映射(project build lifecycle mapping)或生命周期映射(lifecyclemapping)的指令配置来定义如何映射pom.xml中的信息与Eclipse工作空间构造(workspace build)对应的行为。

lifecycle mapping

项目构造生命周期映射可以配置在项目的pom.xml文件中、或者由Eclipse插件提供、或默认使用m2e提供的Maven插件。生命周期映射来源我们称之为生命周期映射元数据源(lifecycle mapping metadata sources)。如果在这些生命周期映射元数据源中没有找到对应的生命周期映射,m2e就会创建一个类似下面的错误标记(error marker):

error marker

针对插件执行,m2e提供了三种基本的行为: ignore, execute或委托给项目配置程序(configurator)。这三个行为选项对应生命周期映射表中的mapping列。

委托给项目配置程序(configurator)

配置程序映射告诉m2e如何把用于匹配插件执行的工作空间项目配置映射工作委托给AbstractProjectConfigurator的实现(使用projectConfigurators扩展点注册)来完成。大多数情况下,都是m2e的扩展(extension)开发人员使用这种行为

Ignore

这个选项将告诉m2e忽略这个插件执行。

<pluginManagement>

  <plugins>

    <plugin>

    <groupId>org.eclipse.m2e</groupId>

    <artifactId>lifecycle-mapping</artifactId>

    <version>1.0.0</version>

    <configuration>

      <lifecycleMappingMetadata>

        <pluginExecutions>

          <pluginExecution>

            <pluginExecutionFilter>

              <groupId>some-group-id</groupId>

              <artifactId>some-artifact-id</artifactId>

              <versionRange>[1.0.0,)</versionRange>

              <goals>

                <goal>some-goal</goal>

              </goals>

            </pluginExecutionFilter>

            <action>

              <ignore/>

            </action>

          </pluginExecution>

        </pluginExecutions>

      </lifecycleMappingMetadata>

    </configuration>

    </plugin>

  </plugins>

</pluginManagement>

另外,M2e还提供了一个简单快速的办法来解决plugin execution not covered问题:

  •  使用<pluginManagement/>包围plugins

Execute

这个选项告诉m2e这个行为将作为Eclipse工作空间全构造或增量构造的一部分而执行。

<pluginManagement>

  <plugins>

    <plugin>

    <groupId>org.eclipse.m2e</groupId>

    <artifactId>lifecycle-mapping</artifactId>

    <version>1.0.0</version>

    <configuration>

      <lifecycleMappingMetadata>

        <pluginExecutions>

          <pluginExecution>

             <pluginExecutionFilter>

              <groupId>some-group-id</groupId>

              <artifactId>some-artifact-id</artifactId>

              <versionRange>[1.0.0,)</versionRange>

              <goals>

                <goal>some-goal</goal>

               </goals>

            </pluginExecutionFilter>

            <action>

              <execute>

                <runOnIncremental>false</runOnIncremental>

              </execute>

            </action>

          </pluginExecution>

        </pluginExecutions>

      </lifecycleMappingMetadata>

    </configuration>

    </plugin>

  </plugins>

</pluginManagement>

快速解决办法是创建ignore映射,然后用<execute/>替换<ignore/>,M2e 1.3和高版本默认设置runOnIncremental为false。

元数据源(metadata sources)查找顺序

1.   项目的 pom.xml

2.   父项目的 pom.xml, 祖父项目的 pom.xml等等.

3.   M2Eclipse 1.2+ workspacepreferences

4.   Installed M2Eclipse extensions(没有特定顺序)

5.   Maven插件提供的M2Eclipse1.1+ lifecycle mapping metadata

6.   M2Eclipse自带的默认lifecyclemapping metadata

M2Eclipse使用找到的第一个可用映射。

Maven插件提供的生命周期映射元数据

从m2e 1.1开始,maven插件开发者可以在插件中提供生命周期元数据源。

这个进步减少了我们很多需要在pom.xml中针对插件的配置。

M2Eclipse 1.2+ workspace preferences

从M2Eclipse 1.2开始,可以在工作空间偏好选项中配置生命周期映射元数据,工作空间级别的插件目标可以使用quick-fix直接忽略掉。然后通过Preferences->Maven->LifecycleMappings可以查看.


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值