2015-06-03 35 views
0

如何告诉Maven将依赖关系复制到特定位置?指定Maven的库目标

小故事:我在Eclipse中有一个GWT项目,也是一个大型项目的Maven模块。这个GWT项目对一些库有依赖关系,我需要将它们复制到<project-dir>/war/WEB-INF/lib。我怎么能告诉Maven做到这一点?


编辑:我已经找到一种方法来复制一个单一依赖 - 但有没有办法他们都用一个简单的指令复制?

<plugins> 
    <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-dependency-plugin</artifactId> 
     <version>2.10</version> 
     <executions> 
      <execution> 
       <id>copy</id> 
       <phase>package</phase> 
       <goals> 
        <goal>copy</goal> 
       </goals> 
       <configuration> 
        <artifactItems> 
         <artifactItem> 
          <groupId>junit</groupId> 
          <artifactId>junit</artifactId> 
          <overWrite>false</overWrite> 
          <outputDirectory>${basedir}/war/WEB-INF/lib</outputDirectory> 
          <destFileName>optional-new-name.jar</destFileName> 
         </artifactItem> 
        </artifactItems> 
        <outputDirectory>${project.build.directory}/wars</outputDirectory> 
        <overWriteReleases>false</overWriteReleases> 
        <overWriteSnapshots>true</overWriteSnapshots> 
       </configuration> 
      </execution> 
     </executions> 
    </plugin> 
</plugins> 

我也试过这样:

</dependencies> 

<build> 
    <outputDirectory>${project.basedir}/war/WEB-INF/classes</outputDirectory> 
    <plugins> 
     <plugin> 
      <artifactId>maven-dependency-plugin</artifactId> 
      <executions> 
       <execution> 
        <phase>package</phase> 
        <!-- up to <phase>deploy</phase> --> 
        <goals> 
         <goal>copy-dependencies</goal> 
        </goals> 
        <configuration> 
         <outputDirectory>${project.basedir}/war/WEB-INF/lib</outputDirectory> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 

</build> 

结束了一个错误说:

神器还没有被打包呢。在反应器工件上使用时,应在包装后执行复制:参见MDEP-187。

回答

0

它看起来像你试图弯曲Maven做不同于它期望做的事情(例如,这里使用war作为输入和输出文件夹)。作为一个经验法则,永远不要试图与Maven战斗,你最终会失败。遵循(几乎未记录的)Maven Way™或仅使用另一个, 更多 灵活的工具(如Ant + Ivy或Gradle)。

如果你想在Eclipse中使用谷歌Eclipse插件使用Maven使用GWT,然后看看https://web.archive.org/web/20130619170526/https://developers.google.com/eclipse/docs/faq#gwt_with_mavenhttps://code.google.com/p/google-web-toolkit/wiki/WorkingWithMaven

直接回答你的问题,假设一个项目,<packaging>war</packaging>,你不得不将warSourceDirectory从其src/main/webapp默认值更改为war,然后尝试war:inplace
尽管(参见上面的链接)推荐的方法是使用war:exploded(或war:war,即简单的mvn package),并使用webappDirectory而不是warSourceDirectory运行GWT DevMode。

+0

非常好的答案,尤其是对于新手Maven的!我开始设置所有的东西是很好的,所以我可能会选择另一个系统 - 让我们看看我需要和Maven争取多久。谢谢您的回答! – displayname

+0

如果你想在Maven中使用GWT,我建议从我的原型开始:https://github.com/tbroyer/gwt-maven-archetypes如果你想了解更多关于Maven的设计及其局限性,看看我的博客(其中许多人)http://blog.ltgt.net –

+0

哦,我看到 - 在Eclipse中的Maven模块项目向导让我选择不同的原型,但我怎么能安装一个新的?我想我必须阅读更多关于Maven的内容。我仍然不确定是否喜欢它.. – displayname

0

dependency:copy-dependencies应该做的工作。

+0

我已经试过那个,但是最后我得到一个错误,说“* Artifact还没有被打包,当用于反应器工件时,应该在打包后执行复制*”。 – displayname