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
在<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
中浏览到该文件并单击确定:
【讨论】:
如果复制依赖项是构建 WAR 文件的重要步骤怎么办?我正在处理调用 m2Eclipse 的怪物,即使更改要执行的操作,重要文件也不会复制到目标文件夹... 对于自动生成的忽略设置,@PhoneTech, m2e 添加了注释“此插件的配置仅用于存储 Eclipse m2e 设置。它对 Maven 构建本身没有影响。” 不确定这意味着什么,因为你说的东西不会为你复制。 是的,它有帮助...但是要摆脱警告的代码太多了:P 这仍然给我一个警告,但错误消失了。【参考方案2】:这是 Eclipse M2E plugin execution not covered 的 M2E 问题。
要解决这个问题,你要做的就是映射它无法识别的生命周期并指示 M2E 执行它。
您应该在 plugins
之后的 build
内添加此内容。这将消除错误并使 M2E 识别目标 copy-depencies
或 maven-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>
【讨论】:
这确实解决了它。我很愚蠢,当人们谈论将<plugins>
移动到<pluginManagement>
时,我认为实际上应该将<groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId>
移动到那里。但它是关于需要包含在<pluginManagement>
中的<groupId>org.eclipse.m2e</groupId> <artifactId>lifecycle-mapping</artifactId>
。在 Eclipse 中使用 Quick Fix 时,在常规 <plugins>
above 上添加了相同的内容,并且该位置似乎也可以正常工作。然后关键是将<ignore>
更改为<execute>
。不错。
发现我需要 plugins
之后不需要在build
里面加这个,你可以先加这个。【参考方案3】:
如果复制依赖、解包、打包等对您的项目很重要,您不应忽略它。您必须将您的 <plugins>
包含在使用 Eclipse Indigo SR1、maven 2.2.1 测试的 <pluginManagement>
中
【讨论】:
谢谢,它对 Eclipse Indigo SR2 也有帮助 我有点迷路了...这是否意味着使用上面的代码但使用<execute />
而不是<ignore />
?谢谢!
想多解释一下吗?只需将<plugin>
放入<pluginManagement>
,但仍然引用它来完成其工作,仍然会给我同样的警告。
@CaioToOn,也许你知道更多......?将其添加到<pluginManagement>
后,我还需要添加“常规”2 行<build><plugins><plugin>...
,引用<pluginManagement>
中配置的行,对吧? (在<pluginManagement>
时仍然看到朱诺抱怨同样的事情。)
@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