簡體   English   中英

使用Maven將依賴項下載到命令行上的目錄

[英]Using Maven to download dependencies to a directory on the command line

我需要將項目的所有傳遞依賴項下載到命令行上的目錄, 而不需要pom.xml文件或其他腳本。 理想情況下,我可以使用一個或兩個命令執行此操作。 據我所知,這至少是mvn的兩步過程。

  1. 將依賴項下載到本地存儲庫
  2. 將依賴項復制到lib目錄

為了獲得我運行的依賴項

$ mvn org.apache.maven.plugins:maven-dependency-plugin:2.6:get -DgroupId=org.jclouds.provider -DartifactId=rackspace-cloudservers-us -Dversion=1.5.8

哪個效果很好。 不幸的是,dest param並沒有幫助我,因為它不會將所有傳遞依賴項放在dest中。

所以現在我需要將該JAR文件及其所有傳遞依賴項復制到我的lib目錄中。 我知道這部分已經在StackOverflow上被問了很多次,但是我的工作沒有任何效果。 我嘗試了以下內容。

$ mvn dependency:copy-dependencies ...
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-dependency-plugin:2.1:copy-dependencies (default-cli): Goal requires a project to execute but there is no POM in this directory

$ mvn dependency:copy ...
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-dependency-plugin:2.1:copy (default-cli): Goal requires a project to execute but there is no POM in this directory

從閱讀StackOverflow上的文檔和其他答案的副本依賴和復制我認為我可以從命令行使用它們沒有pom.xml但mvn似乎需要一個。 我的Maven版本是Apache Maven 3.0.4(r1232337; 2012-01-17 02:44:56-0600)。

任何人都可以給我一個使用沒有pom.xml的mvn復制傳遞依賴的例子嗎?

有沒有更好的方法來做我在這里嘗試完成的事情?

Apache ivy可以作為獨立jar運行,以下載Maven依賴項。 不需要POM。

curl -L -O http://search.maven.org/remotecontent?filepath=org/apache/ivy/ivy/2.3.0/ivy-2.3.0.jar
java -jar ivy-2.3.0.jar -dependency org.jclouds.provider rackspace-cloudservers-us 1.5.8 -retrieve "lib/[artifact]-[revision](-[classifier]).[ext]"

生成以下文件:

├── ivy-2.3.0.jar
└── lib
    ├── aopalliance-1.0.jar
    ├── asm-3.1.jar
    ├── bcprov-jdk16-1.46.jar
    ├── cglib-2.2.1-v20090111.jar
    ├── clojure-1.3.0.jar
    ├── core.incubator-0.1.0.jar
    ├── gson-2.2.jar
    ├── guava-13.0.jar
    ├── guice-3.0.jar
    ├── guice-assistedinject-3.0.jar
    ├── javax.inject-1.jar
    ├── jclouds-compute-1.5.8.jar
    ├── jclouds-core-1.5.8.jar
    ├── jclouds-scriptbuilder-1.5.8.jar
    ├── jsr250-api-1.0.jar
    ├── jsr311-api-1.1.1.jar
    ├── openstack-keystone-1.5.8.jar
    ├── openstack-nova-1.5.8.jar
    ├── rackspace-cloudidentity-1.5.8.jar
    ├── rackspace-cloudservers-us-1.5.8.jar
    ├── rackspace-cloudservers-us-1.5.8-javadoc.jar
    ├── rackspace-cloudservers-us-1.5.8-sources.jar
    ├── rocoto-6.1.jar
    └── tools.logging-0.2.3.jar

第一個命令幾乎可以獲得您所需要的東西 - 相關依賴項的POM。 一旦你有了這個,你就不需要另外一個項目POM來運行copy:dependencies

這是一個例子:

mvn org.apache.maven.plugins:maven-dependency-plugin:2.7:get -DgroupId=org.jclouds.provider -DartifactId=rackspace-cloudservers-us -Dversion=1.5.8 -Dtype=pom

mvn org.apache.maven.plugins:maven-dependency-plugin:2.7:copy-dependencies -f /path/to/m2/repo/org/jclouds/provider/rackspace-cloudservers-us/1.5.8/rackspace-cloudservers-us-1.5.8.pom -DoutputDirectory=/path/to/target/dir/don't/use/.

正如Everett Toews所指出的,您可以使用copy:dependencies其他選項copy:dependencies來進一步細化下載的內容,例如通過添加-DexcludeTypes=test-jar來過濾掉測試JAR。

根據我的理解,您希望將所有依賴項工件下載到本地計算機上的一個文件夾中(無需搜索本地存儲庫)。 這樣做的簡單方法是創建一個簡單的 pom.xml是的,請創建pom ),它將創建WAR文件並依賴於您的工件。 mvn clean package您將在WAR的lib文件夾中找到所有依賴項工件(包括傳遞)。

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         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>testwar</groupId>
    <artifactId>examplewar</artifactId>
    <packaging>war</packaging>
    <version>1.0-SNAPSHOT</version>
    <name>examplewar Maven Webapp</name>
    <dependencies>
        <dependency>
            <groupId>org.jclouds.provider</groupId>
            <artifactId>rackspace-cloudservers-us</artifactId>
            <version>1.5.8</version>
        </dependency>
    </dependencies>

</project>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM