0

我试图找出如何我可以将所有依赖关系复制到明确版本和所有必需的依赖关系。Maven的副本依赖包括组和所有传递元素

例如:我的项目需要第三方库的版本3,称为foobar。 我想将版本3库复制到名为lib-foobar - $ {foobar.version}的文件夹中。 在这个文件夹中是那些需要在版本3中使用foobar的罐子。这意味着罐子本身以及在foobar pom中声明的所有相关罐子。

我目前在阶段包中使用org.codehaus.mojo:maven-dependency-plugin:2.1和目标拷贝依赖关系。 我的配置是

<configuration> 
    <outputDirectory>${project.build.directory}/lib-foobar-${foobar.version}</outputDirectory> 
    <includeGroupIds>com.foobar</includeGroupIds> 
    <excludeTransitive>false</excludeTransitive> 
    <excludeScope>test</excludeScope> 
    <includeScope>compile</includeScope> 
</configuration> 

我不想因为新版本的一步每月发生列出所有允许和不允许LIB的。

有没有其他工具可以做到这一点,或者有什么闪避吗? 感谢您的回复!

+2

你可以试试[maven-assembly-plugin](http://maven.apache.org/plugins/maven-assembly-plugin/)。 – user944849

回答

3

非常感谢user944849。

这对我找出最佳解决方案非常有帮助。

大家谁是有兴趣在我的解决方案,就到这里吧:

起初,我改变了插件Maven的assemby-插件,并增加了新的装配文件

 <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-assembly-plugin</artifactId> 
     <version>2.4</version> 
     <dependencies> 
      <dependency> 
      <groupId>com.foobar</groupId> 
      <artifactId>foobar-parent</artifactId> 
      <version>${foobar.version}</version> 
      <type>pom</type> 
      </dependency> 
     </dependencies> 
     <executions> 
      <execution> 
      <id>copy-foobar</id> 
      <phase>package</phase> 
      <goals> 
       <goal>single</goal> 
      </goals> 
      <configuration> 
       <descriptors> 
        <descriptor>src/assemble/foobar-libs.xml</descriptor> 
       </descriptors> 
      </configuration> 
      </execution> 
     </executions> 
     </plugin> 

和大会文件看起来像:

<assembly 
    xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd"> 
    <id>standalone</id> 
    <formats> 
    <format>dir</format> 
    </formats> 
    <includeBaseDirectory>false</includeBaseDirectory> 
    <dependencySets> 
    <dependencySet> 
     <includes> 
     <include>org.foobar</include> 
     </includes> 
     <outputDirectory>/lib-foobar-${foobar.version}</outputDirectory> 
     <useProjectArtifact>true</useProjectArtifact> 
     <useTransitiveFiltering>true</useTransitiveFiltering> 
     <unpack>false</unpack> 
    </dependencySet> 
    </dependencySets> 

</assembly> 

的关键是<useTransitiveFiltering>元素,从而解决了基于所包括的所有库传递库。