我让Maven将一些依赖文件复制到GWT项目的特定位置。 maven-dependency-plugin
完成了这项工作,到目前为止它的工作原理。唯一的问题是我从Eclipse那里得到一个错误:
Artifact has not been packaged yet. When used on reactor artifact, copy should be executed after packaging: see MDEP-187.
我试图更改<phase>
,但这不起作用。我怎样才能摆脱这个错误,为什么它会出现,因为Maven按照预期构建。
<plugins>
<plugin>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<phase>install</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.basedir}/war/WEB-INF/lib</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
答案 0 :(得分:24)
我遇到了同样的错误,我通过解决方法解决了这个问题。我已经在eclipse ide之外的控制台中使用maven编译和安装了项目。我在eclise ide中刷新了项目后错误消失了。
答案 1 :(得分:8)
我通过将插件阶段设置为 prepare-package 来解决。我知道它仍然是一种解决方法,但我认为它比外部编译更清晰。
<plugins>
[...]
<plugin>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<phase>prepare-package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
[YOUR_CONFIGURATION]
</configuration>
</execution>
</executions>
</plugin>
[...]
</plugins>
修改强>
这不是完全解决的问题:有时它会起作用,有时则不然。
最终解决方案是通过 eclipse-only maven配置文件使用生命周期映射Maven Dummy插件:
<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>
<lifecycleMappingMetadata>
<pluginExecutions>
<pluginExecution>
<pluginExecutionFilter>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<versionRange>${maven-dependency-plugin.version}</versionRange>
<goals>
<goal>copy-dependencies</goal>
</goals>
</pluginExecutionFilter>
<action>
<ignore />
</action>
</pluginExecution>
</pluginExecutions>
</lifecycleMappingMetadata>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
</profile>
答案 2 :(得分:5)
我不得不在pluginManagement下包装plugins标签以使错误消失。
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>3.0.0</version>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>../../lib/</outputDirectory>
<overWriteReleases>false</overWriteReleases>
<overWriteSnapshots>false</overWriteSnapshots>
<overWriteIfNewer>true</overWriteIfNewer>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</pluginManagement>
答案 3 :(得分:5)
有一个类似于@ s1moner3d的解决方案,它不需要更改pom.xml文件。
转到窗口 - &gt;偏好 - &gt; Maven - &gt; Lifecycle Mappings并单击Open workspace lifecycle mappings元数据
比添加“pluginExecution”条目,如下面的代码所示。如果文件为空,请复制下面的整个内容。您可能需要更改“versionRange”。
<?xml version="1.0" encoding="UTF-8"?>
<lifecycleMappingMetadata>
<pluginExecutions>
<pluginExecution>
<pluginExecutionFilter>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<versionRange>2.10</versionRange>
<goals>
<goal>copy-dependencies</goal>
</goals>
</pluginExecutionFilter>
<action>
<ignore />
</action>
</pluginExecution>
</pluginExecutions>
</lifecycleMappingMetadata>
要使其生效,请返回“首选项”并单击“重新加载工作空间生命周期映射”元数据。更新maven项目和/或重建。错误应该消失。
如果您因为任何原因不能或不想修改pom.xml但希望阻止eclipse m2e执行特定插件的特定目标,则非常有用。
答案 4 :(得分:1)
我使用 this answer 解决了这个问题。 2017 年对 m2eclipse 的更新意味着您不需要像 s1moner3d 的回答那样使用 pluginManagment
xml,这样就可以消除我为“生命周期映射”{{1 }} 标记时我包含它。
总结:
org.eclipse.m2e 不需要 artifactId
块
在您的 pluginManagment
标签中添加 <?m2e ignore?>
标签:
<execution>
答案 5 :(得分:0)
对于那些回到此问题的人来说,报告在Eclipse中针对maven-dependency-plugin
2.8版看到相同的问题可能很有用。这是在package
阶段:
Artifact has not been packaged yet. When used on reactor artifact, copy should be executed after packaging: see MDEP-187. (org.apache.maven.plugins:maven-dependency-plugin:2.8:copy:copy-proguard:package)
在这种情况下,升级到3.1.1解决了问题:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>3.1.1</version>
<executions>
<execution>
<id>copy-proguard</id>
<phase>package</phase>
<goals>
<goal>copy</goal>
</goals>
...