2013-10-15 84 views
9

我有一個maven項目,我將Spring框架庫稱爲依賴關係,我想將彈性框架依賴關係與傳遞依賴關係複製到指定位置。Maven - 將特定的依賴關係及其傳遞依賴關係複製到給定位置

我已經通過在Apache的Maven依賴插件指南,我有幾個選項,其中不會解決完整的問題。

  1. 副本相依選項
<plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-dependency-plugin</artifactId> 
     <version>2.8</version> 
     <executions> 
      <execution> 
      <id>copy-dependencies</id> 
      <phase>package</phase> 
      <goals> 
       <goal>copy-dependencies</goal> 
      </goals> 
      <configuration> 
       <outputDirectory>${project.build.directory}/alternateLocation</outputDirectory> 
       <overWriteReleases>false</overWriteReleases> 
       <overWriteSnapshots>false</overWriteSnapshots> 
       <overWriteIfNewer>true</overWriteIfNewer> 
      </configuration> 
      </execution> 
     </executions> 
     </plugin> 

這將複製所有的依賴關係,並有transitives給定的位置,我只想要Spring的依賴,有transitives。

  1. 複製特定的文物
<plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-dependency-plugin</artifactId> 
     <version>2.8</version> 
     <executions> 
      <execution> 
      <id>copy</id> 
      <phase>package</phase> 
      <goals> 
       <goal>copy</goal> 
      </goals> 
      <configuration> 
       <artifactItems> 
       <artifactItem> 
        <groupId>org.springframework</groupId> 
        <artifactId>spring-web</artifactId> 
        <version>3.2.4.RELEASE</version> 
        <type>jar</type> 
        <overWrite>false</overWrite>     <outputDirectory>${project.build.directory}/alternateLocation</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> 

這不是應對的傳遞依賴。

任何解決我的兩個問題的解決方案。

+0

這可能是最好使用[複製依賴性(http://maven.apache.org/plugins/maven-dependency-plugin/copy-dependencies-mojo.html )目標而不是複製目標。 – khmarbaise

回答

-1

你可以使用maven assembly插件。

檢查出來並專門依賴集:

http://maven.apache.org/plugins/maven-assembly-plugin/

http://maven.apache.org/plugins/maven-assembly-plugin/assembly.html#class_dependencySet

可以提供輸出目錄,你可以指定哪些依賴關係就擺在那裏

還有一個選項:useTransitiveDependencies。將其設置爲true以獲得您想要的行爲。

+0

-1,因爲與此相關的'maven-assembly-plugin'表現完全一樣。如果僅在'dependencySet'中僅包含'org.springframework:spring-web'構件,則不管設置了useTransitiveDependencies,只有它會被複制,因爲它的所有傳遞依賴項都不包含在白名單中。這非常煩人。 –

+0

我感到你的痛苦。我認爲唯一可行的方法是創建一個子項目或另一個模塊,它僅依賴於您想要的項目,然後生成一個包含其deps + transitive的zip。 –

0

這裏有一個選項:

  • 創建模塊(製片人)收集的依賴,並把它們發佈的拉鍊。
  • 消費用戶depencency:解包解壓該郵政編碼

這是繁瑣和排除仍然需要一些採摘櫻桃,但要少得多,它可以並行的線程運行。

生產者

<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>packaging</groupId> 
    <artifactId>jdbcdrivers</artifactId> 
    <packaging>zip</packaging> 
    <name>jdbcdrivers</name> 
    <dependencies> 
<!-- set up deps for capture and limit their impact on anything which depends upon this module via optional-false --> 
<dependency> 
    <groupId>net.sf.jtds</groupId> 
    <artifactId>jtds</artifactId> 
    <scope>test</scope> 
    <optional>false</optional> 
</dependency> 
<dependency> 
    <groupId>org.apache.hive</groupId> 
    <artifactId>hive-jdbc</artifactId> 
    <scope>test</scope> 
    <optional>false</optional> 
</dependency> 
<dependency> 
    <groupId>postgresql</groupId> 
    <artifactId>postgresql</artifactId> 
    <scope>test</scope> 
    <optional>false</optional> 
</dependency> 

    </dependencies> 

    <build>  
<plugins> 
    <plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-assembly-plugin</artifactId> 
    </plugin> 

    <plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-antrun-plugin</artifactId> 
    </plugin> 
    <plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-dependency-plugin</artifactId> 
    <executions> 
     <execution> 
     <id>dist profile: hive jdbc driver ${baseName}</id> 
     <phase>prepare-package</phase> 
     <goals> 
      <goal>copy-dependencies</goal> 
     </goals> 
     <configuration> 
      <outputDirectory>${project.build.outputDirectory}/lib/addons/jdbcdriver/</outputDirectory> 
      <useBaseVersion>true</useBaseVersion> 
      <excludeTransitive>false</excludeTransitive> 
      <overWriteIfNewer>true</overWriteIfNewer> 
      <includeScope>test</includeScope> 
      <excludeScope>provided</excludeScope> 
      <excludeGroupIds>org.codehaus.groovy,org.apache.ivy,jdk.tools</excludeGroupIds> <!-- you might need to cherry pick excludes if scope doesn't worjk --> 
      <prependGroupId>true</prependGroupId> 
     </configuration> 
     </execution> 
    </executions> 
    </plugin> 
</plugins> 
    </build> 
</project> 
+0

這是應該開箱即用嗎?我得到'未知的包裝:zip' – qqilihq

+0

我當然這麼認爲。在我嘗試使用這個maven之後的兩年內,可能會取消zip。 Zip不保留權限,所以它不如tar好(當涉及到java時,它不一定保留權限) –