Подтвердить что ты не робот

Использование Maven для загрузки зависимостей в каталог в командной строке

Мне нужно загрузить все транзитные зависимости проекта в каталог в командной строке без, имеющий файл pom.xml или другой script. В идеале я мог бы сделать это с помощью одной или двух команд. Из того, что я могу сказать, это, по крайней мере, двухэтапный процесс с mvn.

  • Загрузка зависимостей в локальный репозиторий
  • Скопировать зависимости в каталог 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, похоже, нуждается в ней. Моей версией Maven является Apache Maven 3.0.4 (r1232337; 2012-01-17 02: 44: 56-0600).

Может ли кто-нибудь дать мне пример копирования транзитивных зависимостей с использованием mvn без pom.xml?

Есть ли лучший способ сделать то, что я пытаюсь сделать здесь?

4b9b3361

Ответ 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/.

Как указано Everett Toews, вы можете использовать дополнительные опции copy:dependencies, чтобы уточнить, что скачали, например добавив -DexcludeTypes=test-jar, чтобы отфильтровать тестовые JAR.

Ответ 2

Apache ivy можно запустить как автономную банку для загрузки зависимостей 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

Ответ 3

По моему мнению, вы хотите загрузить все артефакты зависимостей в одну папку на вашем локальном компьютере (без поиска в вашем локальном репозитории). Простой способ сделать это - создать простой pom.xml (да, пожалуйста, создайте pom), который создаст WAR файл и будет зависеть от вашего артефакта. После mvn clean package вы найдете все артефакты зависимостей (включая транзитивные) в папке lib WAR.

<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>