m2e 不支持 maven-dependency-plugin(目标“copy-dependencies”、“unpack”)

Posted

技术标签:

【中文标题】m2e 不支持 maven-dependency-plugin(目标“copy-dependencies”、“unpack”)【英文标题】:maven-dependency-plugin (goals "copy-dependencies", "unpack") is not supported by m2e 【发布时间】:2012-02-01 02:58:15 【问题描述】:

我有一个相当简单的 Maven 项目:

<project>
    <dependencies>
        ...
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <version>2.4</version>
                <executions>
                    <execution>
                        <id>copy-dependencies</id>
                        <phase>package</phase>
                        <goals>
                            <goal>copy-dependencies</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>$project.build.directory/dependencies</outputDirectory>
                        </configuration>    
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

但是,我在 m2eclipse 中收到以下错误:

Description Resource    Path    Location    Type
maven-dependency-plugin (goals "copy-dependencies", "unpack") is not supported by m2e. pom.xml  /jasperreports-test line 60 Maven Project Build Lifecycle Mapping Problem

我为什么要关心 m2eclipse 是否“支持”这个任务? Maven 确实如此,而这正是我真正关心的。我怎样才能让我的项目中的这个错误消失?

【问题讨论】:

最近 m2e 提供了一个快速修复程序,可以将适当的配置添加到您的 pom.xml 中,以使 m2e 忽略不受支持的目标。 @ThorbjørnRavnAndersen,什么是快速修复? @MuhammadGelbana 在 Eclipse 中,“快速修复”意味着:将光标放在问题上;按Ctrl-1;选择快速修复。 【参考方案1】:

这似乎是一个已知问题。您可以指示 m2e 忽略这一点。

选项 1:pom.xml

&lt;build/&gt; 标签内添加以下内容:

<pluginManagement>
<plugins>
    <!-- Ignore/Execute plugin execution -->
    <plugin>
        <groupId>org.eclipse.m2e</groupId>
        <artifactId>lifecycle-mapping</artifactId>
        <version>1.0.0</version>
        <configuration>
            <lifecycleMappingMetadata>
                <pluginExecutions>
                    <!-- copy-dependency plugin -->
                    <pluginExecution>
                        <pluginExecutionFilter>
                            <groupId>org.apache.maven.plugins</groupId>
                            <artifactId>maven-dependency-plugin</artifactId>
                            <versionRange>[1.0.0,)</versionRange>
                            <goals>
                                <goal>copy-dependencies</goal>
                            </goals>
                        </pluginExecutionFilter>
                        <action>
                            <ignore />
                        </action>
                    </pluginExecution>
                </pluginExecutions>
            </lifecycleMappingMetadata>
        </configuration>
    </plugin>
   </plugins></pluginManagement>

您将需要执行 Maven... -> 在此之后更新您的项目的项目配置。

阅读更多:http://wiki.eclipse.org/M2E_plugin_execution_not_covered#m2e_maven_plugin_coverage_status

选项 2:全局 Eclipse 覆盖

为避免更改您的 POM 文件,可以通过 Eclipse 设置将忽略覆盖应用于整个工作区。

将此文件保存在磁盘上的某个位置:https://gist.github.com/maksimov/8906462

Eclipse/Preferences/Maven/Lifecycle Mappings 中浏览到该文件并单击确定:

【讨论】:

如果复制依赖项是构建 WAR 文件的重要步骤怎么办?我正在处理调用 m2Eclipse 的怪物,即使更改要执行的操作,重要文件也不会复制到目标文件夹... 对于自动生成的忽略设置,@PhoneTech, m2e 添加了注释“此插件的配置仅用于存储 Eclipse m2e 设置。它对 Maven 构建本身没有影响。” 不确定这意味着什么,因为你说的东西不会为你复制。 是的,它有帮助...但是要摆脱警告的代码太多了:P 这仍然给我一个警告,但错误消失了。【参考方案2】:

这是 Eclipse M2E plugin execution not covered 的 M2E 问题。

要解决这个问题,你要做的就是映射它无法识别的生命周期并指示 M2E 执行它。

您应该在 plugins 之后的 build 内添加此内容。这将消除错误并使 M2E 识别目标 copy-depenciesmaven-dependency-plugin 并使 POM 按预期工作,每次 Eclipse 构建它时将依赖项复制到文件夹。如果您只想忽略错误,则将&lt;execute /&gt; 更改为&lt;ignore /&gt;。无需像之前建议的那样将您的maven-dependency-plugin 包含在pluginManagement 中。

<pluginManagement>
  <plugins>
    <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-dependency-plugin</artifactId>
                <versionRange>[2.0,)</versionRange>
                <goals>
                  <goal>copy-dependencies</goal>
                </goals>
              </pluginExecutionFilter>
              <action>
                <execute />
              </action>
            </pluginExecution>
          </pluginExecutions>
        </lifecycleMappingMetadata>
      </configuration>
    </plugin>
  </plugins>
</pluginManagement>

【讨论】:

这确实解决了它。我很愚蠢,当人们谈论将&lt;plugins&gt; 移动到&lt;pluginManagement&gt; 时,我认为实际上应该将&lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt; &lt;artifactId&gt;maven-dependency-plugin&lt;/artifactId&gt; 移动到那里。但它是关于需要包含在&lt;pluginManagement&gt; 中的&lt;groupId&gt;org.eclipse.m2e&lt;/groupId&gt; &lt;artifactId&gt;lifecycle-mapping&lt;/artifactId&gt;。在 Eclipse 中使用 Quick Fix 时,在常规 &lt;plugins&gt;above 上添加了相同的内容,并且该位置似乎也可以正常工作。然后关键是将&lt;ignore&gt; 更改为&lt;execute&gt;。不错。 发现我需要 false 按照您提供的链接上的建议执行。感谢您的回答让我走上了正确的道路。 你的plugins之后不需要在build里面加这个,你可以先加这个。【参考方案3】:

如果复制依赖、解包、打包等对您的项目很重要,您不应忽略它。您必须将您的 &lt;plugins&gt; 包含在使用 Eclipse Indigo SR1、maven 2.2.1 测试的 &lt;pluginManagement&gt;

【讨论】:

谢谢,它对 Eclipse Indigo SR2 也有帮助 我有点迷路了...这是否意味着使用上面的代码但使用&lt;execute /&gt; 而不是&lt;ignore /&gt;?谢谢! 想多解释一下吗?只需将&lt;plugin&gt; 放入&lt;pluginManagement&gt;,但仍然引用它来完成其工作,仍然会给我同样的警告。 @CaioToOn,也许你知道更多......?将其添加到&lt;pluginManagement&gt; 后,我还需要添加“常规”2 行&lt;build&gt;&lt;plugins&gt;&lt;plugin&gt;...,引用&lt;pluginManagement&gt; 中配置的行,对吧? (在&lt;pluginManagement&gt; 时仍然看到朱诺抱怨同样的事情。) @Arjan 你应该用pluginManagement 括起来你的plugins 标签。但是看看我在下面给出的答案,***.com/a/12109018/179138。建议的忽略执行,但不要在 Eclipse 上执行插件。【参考方案4】:

要使其工作,而不是忽略它,您可以为 maven-dependency-plugin 安装 m2e 连接器:https://github.com/ianbrandt/m2e-maven-dependency-plugin

以下是您在 Eclipse 中的操作方式:

    转到 Window/Preferences/Maven/Discovery/ 输入目录 URL:http://download.eclipse.org/technology/m2e/discovery/directory-1.4.xml 点击打开目录 选择 m2e-maven-dependency-plugin 享受

【讨论】:

+1 为正确答案。请记住在安装插件后对pom.xml 文件进行小编辑,否则错误可能不会消失。 在 Eclipse Luna 中,目录 URL 是 download.eclipse.org/technology/m2e/discovery/directory-1.5.xml 我试过了,但目录 URL 字段不可编辑!我的最后设置为:download.eclipse.org/technology/m2e/discovery/directory.xml(即没有-1.4)。任何想法,如何/在哪里可以调整?【参考方案5】:

尽管上面的 CaioToOn 给出了回答,但我仍然无法在最初使用它时遇到问题。

经过多次尝试,终于成功了。 我在这里粘贴我的最终版本 - 希望它对其他人有所帮助。

    <build> 
        <plugins>
            <!--
            Copy all Maven Dependencies (-MD) into libMD/ folder to use in classpath via shellscript
             --> 
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <version>2.8</version>
                <executions>
                    <execution>
                        <id>copy</id>
                        <phase>package</phase>
                        <goals>
                            <goal>copy-dependencies</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>$project.build.directory/libMD</outputDirectory>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
        <!--  
        Above maven-dependepcy-plugin gives a validation error in m2e. 
        To fix that, add the plugin management step below. Per: http://***.com/a/12109018
        -->
        <pluginManagement>
            <plugins>
                <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-dependency-plugin</artifactId>
                                        <versionRange>[2.0,)</versionRange>
                                        <goals>
                                            <goal>copy-dependencies</goal>
                                        </goals>
                                    </pluginExecutionFilter>
                                    <action>
                                        <execute />
                                    </action>
                                </pluginExecution>
                            </pluginExecutions>
                        </lifecycleMappingMetadata>
                    </configuration>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>

【讨论】:

能否提供在eclipse中执行的目标?【参考方案6】:

我在 Eclipse 中尝试加载 Hadoop 项目时遇到了同样的问题。我尝试了上面的解决方案,我相信它可能在 Eclipse Kepler 中有效......甚至不再确定(尝试了太多东西)。

由于我遇到的所有问题,我决定继续使用 Eclipse Luna,但上面的解决方案对我不起作用。

还有一篇文章建议将 ... 标签更改为 package。我开始这样做,它会“清除”错误......但是,我开始认为这些变化会在以后咬我——我不是 Maven 专家。

幸运的是,我发现了如何删除所有错误。转到 Window->Preferences->Maven-> Error/Warnings 并将“生命周期未涵盖的插件执行...”选项更改为“忽略”。希望对您有所帮助。

【讨论】:

【参考方案7】:

我知道这是旧帖子,但我今天也遇到了这个问题,我使用了此页面中的模板:http://maven.apache.org/plugins/maven-dependency-plugin/usage.html

<project>
  [...]
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-dependency-plugin</artifactId>
        <version>2.7</version>
        <executions>
          <execution>
            <id>copy</id>
            <phase>package</phase>
            <goals>
              <goal>copy</goal>
            </goals>
            <configuration>
              <artifactItems>
                <artifactItem>
                  <groupId>[ groupId ]</groupId>
                  <artifactId>[ artifactId ]</artifactId>
                  <version>[ version ]</version>
                  <type>[ packaging ]</type>
                  <classifier> [classifier - optional] </classifier>
                  <overWrite>[ true or false ]</overWrite>
                  <outputDirectory>[ output directory ]</outputDirectory>
                  <destFileName>[ filename ]</destFileName>
                </artifactItem>
              </artifactItems>
              <!-- other configurations here -->
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
  [...]
</project>

m2e 1.3.1 下一切正常。

当我尝试使用时

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <version>2.4</version>
            <executions>
                <execution>
                    <id>copy-dependencies</id>
                    <phase>package</phase>
                    <goals>
                        <goal>copy-dependencies</goal>
                    </goals>
                    <configuration>
                        <outputDirectory>$project.build.directory/dependencies</outputDirectory>
                    </configuration>    
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

我也收到了m2e 错误。

【讨论】:

是的,这正是本文的目的:m2e 现在需要 connectors 来映射 Eclipse 构建生命周期中的插件执行。 即使在我写评论的时候,m2e 也只支持一些这样的连接器:你必须使用 lifecycle-mapping Maven 插件来指导 m2e 如何处理不受支持的插件(这里是 maven-dependency-plugin)跨度> 【参考方案8】:

另一个选项是导航到问题选项卡,右键单击错误,单击应用快速修复。应该生成忽略 xml 代码并为您应用它的 .pom 文件。

【讨论】:

以上是关于m2e 不支持 maven-dependency-plugin(目标“copy-dependencies”、“unpack”)的主要内容,如果未能解决你的问题,请参考以下文章

在保存文件时,如何让 eclipse m2e 构建当前项目和引用它的 EAR 项目?

将 maven-jaxb-plugin 与 eclipse 和 m2e 一起使用时缺少 ErrorListener

一次m2eclipse的安装大坑经历之http://m2eclipse.sonatype.org/sites/m2e

Maven (m2e) 没有执行 ant 任务

如何禁用 M2E 生命周期验证

从 Checkstyle config with M2E 为 Eclipse Formatter 自动配置制表符