Использование 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?
Есть ли лучший способ сделать то, что я пытаюсь сделать здесь?
Ответы
Ответ 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>