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

时间:2012-01-02 22:34:49

标签: eclipse maven m2eclipse

我有一个相当简单的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确实如此,这就是我真正关心的。如何才能在我的项目中出现此错误消失?

8 个答案:

答案 0 :(得分:165)

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

选项1:pom.xml

<build/>标记中添加以下内容:

<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 ...... - &gt;在此之后更新项目的项目配置。

了解详情: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中浏览到此文件,然后单击“确定”:

Eclipse Settings

答案 1 :(得分:57)

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

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

您应该在pluginsbuild之后添加此内容。这将删除错误并使M2E识别copy-depencies的目标maven-dependency-plugin并使POM按预期工作,每次Eclipse构建时都将依赖项复制到文件夹。如果您只是想忽略该错误,则可以更改<execute />的{​​{1}}。无需按照之前的建议将<ignore />封入maven-dependency-plugin

pluginManagement

答案 2 :(得分:38)

如果复制依赖项,解包,打包等对您的项目很重要,则不应忽略它。您必须将<plugins>封装在使用Eclipse Indigo SR1测试的<pluginManagement>中,maven 2.2.1

答案 3 :(得分:16)

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

以下是在Eclipse中如何做到这一点:

  1. 转到Window / Preferences / Maven / Discovery /
  2. 输入目录网址:http://download.eclipse.org/technology/m2e/discovery/directory-1.4.xml
  3. 点击“打开目录”
  4. 选择m2e-maven-dependency-plugin
  5. 享受

答案 4 :(得分:8)

尽管上面的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://stackoverflow.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>

答案 5 :(得分:1)

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

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

还有一篇帖子建议将...标签更改为包。我开始这样做了,它会“清除”错误......然而,我开始认为这些改变会让我后来咬我 - 我不是Maven的专家。

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

答案 6 :(得分:0)

我知道这是旧帖子,但我今天也遇到了这个问题,并且我使用了此页面中的模板: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错误。

答案 7 :(得分:0)

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