2013-03-16 10 views
20

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

    1. ダウンロードの依存関係は、私は素晴らしい作品

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

      を実行して依存関係を取得するには、libディレクトリ

    への依存関係をコピーします。残念ながら、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つ必要です。 My MavenのバージョンはApache Maven 3.0.4です(r1232337; 2012-01-17 02:44:56-0600)。

    pom.xmlなしでmvnを使用して過渡的な依存関係をコピーする例は誰にでも分かりますか?

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

  • +0

    いいantrunのプラグインがあります。試してみてください。 –

    +0

    私はあなたがhttp://maven.apache.org/plugins/maven-antrun-plugin/を意味すると思います。私は達成しようとしていることをどのようにして使うのでしょうか? –

    +0

    ディレクトリのコピーと移動にantrunプラグインの_run_ゴールを使用していますので、すべてのファイル(jarファイル、cfgファイルなど)をいくつかのフォルダに集めて転送することができます。または単純にcp/xcopyを使用していますか? –

    答えて

    23

    最初のコマンドは、ほとんどあなたが必要なものを取得します - 問題の依存関係のPOMを。あなたがcopy:dependenciesを実行するために、さらにプロジェクトのPOMを必要はありません、というたら:

    ここでは例です:

    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の追加オプションを使用することができます、例えばテストJARを除外するために-DexcludeTypes=test-jarを追加します。

    0

    私の理解によれば、ローカルのリポジトリを検索することなく、すべての依存関係成果物をローカルコンピュータの1つのフォルダにダウンロードしたいと考えています。簡単な方法は、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> 
    
    +0

    いいえpom.xmlしてください。 –

    26

    Apache ivyは、Maven依存関係をダウンロードするためにstandalone jarとして実行できます。 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 
    
    +0

    これは素晴らしい答えであり、非常にうまくいきますが、可能であれば私はMavenだけに固執したいと思います。ありがとう! –

    +0

    このIvyコマンドにカスタムMavenリポジトリを追加するにはどうすればよいですか? –

    +1

    @JanusTroelsen "-settings"オプションを使用して、レポを指し示すアイビー(ivy)設定ファイルを渡します。設定ファイルの例については、http://stackoverflow.com/questions/4836011/use-public-maven-repository-with-ivy/ –