摆脱 org.eclipse.m2e:lifecycle-mapping 的 POM not found 警告

Posted

技术标签:

【中文标题】摆脱 org.eclipse.m2e:lifecycle-mapping 的 POM not found 警告【英文标题】:get rid of POM not found warning for org.eclipse.m2e:lifecycle-mapping 【发布时间】:2011-12-15 20:54:23 【问题描述】:

为了让 m2e 1.0 正常工作,我必须指定生命周期映射:

    <pluginManagement>
        <plugins>
            <plugin>
                <groupId>org.eclipse.m2e</groupId>
                <artifactId>lifecycle-mapping</artifactId>
                <version>1.0.0</version>
                <configuration>
                    <lifecycleMappingMetadata>
                        <pluginExecutions>
                            <pluginExecution>
                                <pluginExecutionFilter>
                                    <groupId>org.bsc.maven</groupId>
                                    <artifactId>maven-processor-plugin</artifactId>
                                    <versionRange>[2.0.2,)</versionRange>
                                    <goals>
                                        <goal>process</goal>
                                    </goals>
                                </pluginExecutionFilter>
                                <action>
                                    <execute />
                                </action>
                            </pluginExecution>
                        </pluginExecutions>                         
                    </lifecycleMappingMetadata>
                </configuration>
            </plugin>
        </plugins>
    </pluginManagement>

但后来我收到了这个警告:

 [WARNING] The POM for org.eclipse.m2e:lifecycle-mapping:jar:1.0.0 is missing, no dependency information available
 [WARNING] Failed to retrieve plugin descriptor for org.eclipse.m2e:lifecycle-mapping:1.0.0: Plugin org.eclipse.m2e:lifecycle-mapping:1.0.0 or one of its dependencies could not be resolved: Failed to read artifact descriptor for org.eclipse.m2e:lifecycle-mapping:jar:1.0.0

如果我运行一些特定的 maven 任务,例如 mvn clean install findbugs:findbugs(如果我只运行 mvn clean install 则没有这样的消息)

我知道问题是这个POM不存在,因为它只是定义来保存映射信息的。 (m2e lifecycle-mapping not found)

无论如何,我想保持我的构建干净,没有任何警告,那么我怎样才能摆脱这个特定的呢? (我的 CI 服务器检查没有警告。

我使用 Maven 3.0.2,也尝试过 Maven 3.0.3,但结果相同。

【问题讨论】:

你运行的是哪个 Maven 版本? @khmarbaise:是maven 3.0.2 你能发布这个项目的完整 POM...因为我假设你在你的 pom 中的某个地方有依赖关系...顺便说一句:你试过用 Maven 3.0.3 运行它吗? @khmarbaise:您的意思是不是我已经发布的依赖项之外的其他依赖项? @khmarbaise:Maven 3.0.3 的行为相同 【参考方案1】:

m2eclipse 1.7.0 引入了一个替代方案,即 XML 处理指令。

在最初的示例中,您只需将maven-processor-pluginprocess 目标的每个&lt;execution&gt; 都“注释”为

<?m2e execute?>

有关语法和更多选项的更多详细信息,请参阅release notes。

【讨论】:

我想给这个答案投票 60 次,它比旧的 XML 汤要整洁得多 虽然来自@ctrueden 的&lt;profile /&gt; appraoch 对于我们所有被旧Eclipse 版本卡住的人来说都很棒——这个答案太棒了! 请注意,上面的行将插件标记为execution, once, on project import,这可能不是您想要的。下一个可能的选项可能是&lt;?m2e ignore?&gt;,它会按照它所说的那样做。还有一些更细粒度的选项可用。 请你解释一下我应该把你的代码放在哪里?我在示例中(以及我的 pom.xml)中看不到 maven-processor-plugin 的任何 【参考方案2】:

这是known bug,分辨率为WONTFIX。我认为建议的解决方案是最简单的:

mvn archetype:generate -DgroupId=org.eclipse.m2e -DartifactId=lifecycle-mapping \
 -Dversion=1.0.0 -DarchetypeArtifactId=maven-archetype-mojo

install这个项目。

【讨论】:

这很好用。我将 distributionManagement->repository 标记添加到我们本地 nexus 存储库的 pom 中,并进行了 mvn deploy 以便为我的团队修复它。 “安装这个项目”是什么意思?我应该执行什么? @CptWasp 命令生成一个新项目。您需要使用“mvn install”将其安装在本地 m2 存储库中【参考方案3】:

此解决方案现已弃用,我建议使用@ctrueden 的“配置文件”解决方案,这是公认的答案!

虽然不是最干净的解决方案,但当您在公司或自己使用存储库管理器时,同时您可以这样做: - 结帐https://github.com/mfriedenhagen/dummy-lifecycle-mapping-plugin。 - 独自一人时运行mvn install - 当你有像 Nexus 或 Artifactory 这样的存储库管理器时运行mvn deploy -DaltDeploymentRepository=REPO_ID::default::YOUR_THIRDPARTY_REPO_URL。 - 参见https://github.com/mfriedenhagen/dummy-lifecycle-mapping-plugin/blob/master/README.creole。

问候 米尔科

【讨论】:

这是一个 hack,但这是我目前能想到的最佳解决方案 根据您的弃用警告,我将他更改为接受标志,对不起。【参考方案4】:

我的团队通过将相关配置包装在配置文件中来解决此问题:

<profile>
  <id>only-eclipse</id>
  <activation>
    <property>
      <name>m2e.version</name>
    </property>
  </activation>
  <build>
    <pluginManagement>
      <plugins>
        <plugin>
          <groupId>org.eclipse.m2e</groupId>
          <artifactId>lifecycle-mapping</artifactId>
          <version>1.0.0</version>
          <configuration>
            ...
          </configuration>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>
</profile>

【讨论】:

@Ralph 不,属性激活有效,因为只有 Eclipse 定义了 m2e.version 属性——它不是由 vanilla Maven 或其他 IDE 激活的。不过,它确实假设您使用的是 M2E Eclipse 集成(文件 > 导入 > 现有 Maven 项目)而不是旧的 eclipse:eclipse 目标。 @ctrueden 谢谢你 - 我已经参考。它来自bugs.eclipse.org/bugs/show_bug.cgi?id=367870 这应该是公认的解决方案。它修复了警告,开箱即用地与当前的 eclipse 一起工作,并且不依赖于本地存储库或缓存,因此它也可以在 CI 环境中工作。 这就像一个魅力,非常感谢你,我已经在我的 pom.xml 底部附加了这个配置文件(它看起来像这样:......) @Hoto 它应该在 中的 中——参见 the POM reference。 here 是一个真实的例子。【参考方案5】:

现在有更好的解决方案(仅适用于 Eclipse 中的错误消息)。

在错误生命周期配置未涵盖插件执行时按CTR+1:org.codehaus.mojo:buildnumber-maven-plugin:1.1:create-timestamp(执行:默认- create-timestamp, phase: validate) 然后选择这个选项:

这适用于org.eclipse.m2e.editor.xml_1.2.0.20120903-1050.jar 插件(也许更早)

【讨论】:

当您将它存储在设置中时,其他人会再次看到它。所以对于部署到第三方存储库的公司来说可能更可行:-)。 您命名的快速修复将生命周期映射配置添加到 pom.xml 中。这将导致问题所指的问题,而不是解决它。 我同意@Kissaki;这个答案没有解决这里提出的问题。

以上是关于摆脱 org.eclipse.m2e:lifecycle-mapping 的 POM not found 警告的主要内容,如果未能解决你的问题,请参考以下文章

我应该摆脱继续声明[关闭]

摆脱 #!在 angularjs ngRoute [重复]

TSLint 摆脱缺失的空白

如何摆脱 PHP 中的 filesize() 警告?

摆脱 UITableView 上方的行

如何摆脱这个 - 消息:'你没有订阅这个 API。'。?