使用Maven的依赖下载到一个目录,在命令行上(Using Maven to download de

2019-07-21 18:54发布

我需要下载一个项目,在命令行上一个目录下的所有传递依赖,而无需一个pom.xml文件或其他脚本。 理想情况下,我将能够与一个或两个命令来做到这一点。 从我可以告诉,这是至少有一个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 PARAM并不能帮助我,因为它不会把所有的传递依赖于DEST。

所以现在我需要的是JAR文件及其所有传递依赖的复制到我的lib目录。 我知道这部分已经被问了很多时间在计算器上,但没有工作了我呢。 我试过以下。

$ 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

从这里阅读文档和其他答案在计算器上进行复制的依赖性和复制,我想我将能够在命令行中使用,而不必一个pom.xml但MVN似乎需要一个。 我的Maven的版本就是Apache Maven的3.0.4(r1232337; 2012-01-17 02:44:56-0600)。

谁能给我用MVN没有一个pom.xml复制传递依赖的例子吗?

有没有更好的办法做到我想要做到吗?

Answer 1:

第一条命令几乎得到你所需要的 - 有问题的依赖的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/.

正如指出的埃弗雷特托斯 ,您可以使用其他选项copy:dependencies以进一步缩小加入什么下载,例如-DexcludeTypes=test-jar滤除测试JAR文件。



Answer 2:

Apache的常春藤可以作为一个运行独立的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


Answer 3:

据我的了解你想下载所有的依赖文物本地计算机上的一个文件夹(不含搜索本地库)。 最简单的方法来做到这一点是创建一个简单 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>


文章来源: Using Maven to download dependencies to a directory on the command line