25

pom.xml ファイルやその他のスクリプトを使用せずに、プロジェクトのすべての推移的な依存関係をコマンド ラインのディレクトリにダウンロードする必要があります。理想的には、1 つまたは 2 つのコマンドでこれを行うことができます。私が知る限り、これは mvn を使用した少なくとも 2 段階のプロセスです。

  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 に入れるわけではないため、 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 には 1 つ必要なようです。私の Maven バージョンは Apache Maven 3.0.4 (r1232337; 2012-01-17 02:44:56-0600) です。

pom.xmlなしでmvnを使用して推移的な依存関係をコピーする例を誰か教えてもらえますか?

ここで達成しようとしていることを行うためのより良い方法はありますか?

4

3 に答える 3

34

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
于 2013-03-17T01:20:45.490 に答える
27

最初のコマンドは、必要なもの、つまり問題の依存関係の 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して、ダウンロードしたものをさらに絞り込むことができます。たとえば、追加-DexcludeTypes=test-jarしてテスト JAR を除外することができます。

于 2013-03-18T19:06:35.037 に答える
1

私の理解によると、すべての依存関係アーティファクトをローカルコンピューターの1つのフォルダーにダウンロードする必要があります(ローカルリポジトリを検索する必要はありません)。これを行う簡単な方法は、WARファイルを作成し、アーティファクトに依存する単純な pom.xmlはい、pomを作成してください)を作成することです。その後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>
于 2013-03-16T14:56:21.923 に答える