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


155

我有一个相当简单的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确实如此,而这正是我真正关心的。如何在我的项目中解决该错误?


4
如今,m2e提供了一种快速修复程序,可将适当的配置添加到pom.xml中,以使m2e忽略不受支持的目标。
托尔比约恩Ravn的安德森

@ThorbjørnRavnAndersen,快速解决方案是什么?
穆罕默德·盖尔巴纳

1
@MuhammadGelbana在Eclipse中,“快速修复”的意思是:将光标放在问题上;按Ctrl-1; 选择快速修复。
托尔比约恩Ravn的安徒生

Answers:


164

这似乎是一个已知问题。您可以指示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 ...->更新项目配置。

了解更多: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设定


10
如果复制依赖关系是构建WAR文件的关键步骤怎么办?我正在与怪物m2Eclipse一起工作,即使更改要执行的动作,重要文件也不会复制到目标文件夹中……
bartv 2012年

1
对于自动生成的忽略设置,@ PhoneTech,m2e添加注释“此插件的配置仅用于存储Eclipse m2e设置。它对Maven构建本身没有影响。” 不过,不确定这意味着什么,因为您说的是事情不会为您复制。
Arjan

6
是的,它有帮助...但是要摆脱警告是很多代码:P
dokaspar

这仍然给我一个警告,但是错误消失了。
stevecross 2014年

57

这是M2E的问题,无法执行 Eclipse M2E插件

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

您应该在之后添加这个plugins,里面的build。这将消除该错误,并使M2E认识到其目标copy-depenciesmaven-dependency-plugin并使POM正常工作,每次Eclipse构建它时,都将依赖项复制到文件夹中。如果您只是想忽略该错误,请更改<execute /><ignore />。无需封闭的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>

4
这确实解决了。我当时很愚蠢,以为当人们谈论<plugins>搬入<pluginManagement>一个人时应该把那个搬进<groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId>去。但这<groupId>org.eclipse.m2e</groupId> <artifactId>lifecycle-mapping</artifactId>是需要包含在中的<pluginManagement>。当使用Eclipse中快速修复,同样是添加上述常规<plugins>,似乎那个位置正常工作了。然后,关键是要更改<ignore><execute>。真好
Arjan

1
发现我需要根据您提供的链接上的建议在执行中使用<runOnIncremental> false </ runOnIncremental>。感谢您的回答,使我走上了正确的道路。
网络僧侣

您无需plugins在内添加此后build,您可以在此之前添加。
Fagner Brack 2014年

38

如果复制依赖性,解压缩,打包等对您的项目很重要,则不应忽略它。你必须附上您<plugins><pluginManagement>使用Eclipse靛蓝SR1测试时,Maven 2.2.1


4
谢谢,它对Eclipse Indigo SR2也有帮助
茎干

1
我有点迷路了...这是否意味着使用上面的代码,但使用<execute />而不是<ignore />?谢谢!
xverges 2012年

1
想要解释更多吗?只是把一<plugin><pluginManagement>,但仍引用它来完成其工作,仍然给我相同的警告。
2012年

@CaioToOn,也许您知道更多...?将其添加到后,<pluginManagement>我仍然还需要添加“常规” 2行<build><plugins><plugin>...,引用在中配置的那一行<pluginManagement>,对吗?(仍然看到Juno在抱怨时抱怨同样的事情<pluginManagement>。)
Arjan

@Arjan,应将plugins标记括起来pluginManagement。但是,请看下面我给出的答案stackoverflow.com/a/12109018/179138。建议的选项忽略执行,但不要在Eclipse上执行该插件。
Caio Cunha 2012年

16

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

这是在Eclipse中的操作方式:

  1. 转到窗口/首选项/ Maven /发现/
  2. 输入目录URL:http : //download.eclipse.org/technology/m2e/discovery/directory-1.4.xml
  3. 单击打开目录
  4. 选择m2e-maven-dependency-plugin
  5. 请享用

1
+1为正确答案。只需记住pom.xml在安装插件后对文件进行少量编辑,否则错误可能不会消失。
Fagner Brack


我尝试了此操作,但“目录URL”字段不可编辑!最后将Mine设置为:download.eclipse.org/technology/m2e/discovery/directory.xml(即不带-1.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>

您能否提供在Eclipse中执行的目标?
杰西(Jess)2015年

1

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

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

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

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


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>

m2e1.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现在需要连接器来映射Eclipse构建生命周期中的插件执行。<br/>即使在我写评论时,m2e也仅支持少数几个这样的连接器:您必须使用lifecycle-mappingMaven插件来指导m2e如何处理不受支持的插件(在此处maven-dependency-plugin
OlivierB。13年

0

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.