如何复制多模块项目的依赖项?

时间:2014-04-14 08:36:10

标签: java eclipse maven

我有一个项目依赖于我工作区中的不同项目模块。我试图将所有依赖项(包括模块)复制到lib文件夹,以创建一个没有打包所有jar的可执行jar。

但是maven-dependency-plugin一直在抱怨它无法将模块类复制到我项目的目标文件夹中。什么可能是错的?

        my.groupt         我的模块         1.0     

 <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <executions>
       <execution>
          <id>copy-dependencies</id>
          <phase>package</phase>
          <goals>
             <goal>copy-dependencies</goal>
          </goals>
          <configuration>
             <outputDirectory>${project.build.directory}/lib</outputDirectory>
          </configuration>
       </execution>
    </executions>
 </plugin>

结果:

  

无法执行目标   org.apache.maven.plugins:Maven的依赖关系的插件:2.1:复制依赖性   项目my-project上的(copy-dependencies):复制错误   从C:\ workspace \ my-module \ target \ classes到的工件   C:\ workspace \ my-project \ target \ lib \ classes :(访问被拒绝)

2 个答案:

答案 0 :(得分:2)

失败的原因是eclipse中的工作区解析。 Eclipse m2e将自身注入到maven的工件解析中。

因此,当您的my-project尝试获取所有依赖项时,工件解析器不返回jar文件(尚不存在),而是返回依赖项目的classes文件夹。

如果您尝试使用&#34生成项目;运行为 - &gt; maven install&#34;,它应该可以工作。

所以这是一个你无法在工作空间中轻松解决的场景。要么为我的项目转换工作空间,要么禁用eclipse中的依赖插件(生命周期绑定),要么使用不同的插件(如程序集)来复制你的depdencies(更干净,顺便说一下。)。但请注意,后者也仅在手动调用maven时才有效。

答案 1 :(得分:0)

您可能正在寻找Maven Shade插件。

它更加灵活,但要注意 - 通过Maven Shade构建的任何模块都很难自动跟踪依赖项。尽量不要将阴影结果作为构建过程的主要结果。