神器尚未打包

时间:2015-06-04 11:26:48

标签: eclipse maven

我让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>

6 个答案:

答案 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元数据 screenshot

比添加“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 }} 标记时我包含它。

总结:

  1. org.eclipse.m2e 不需要 artifactId

  2. 在您的 pluginManagment 标签中添加 <?m2e ignore?> 标签:

    <execution>

https://www.eclipse.org/m2e/documentation/release-notes-17.html#new-syntax-for-specifying-lifecycle-mapping-metadata

答案 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>
            ...