2013-03-16 2 views
20

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

  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. Я знаю, что эта часть много раз просила 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?

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

+0

Есть хороший плагин antrun, вы можете попробовать? –

+0

Я предполагаю, что вы имеете в виду http://maven.apache.org/plugins/maven-antrun-plugin/. Как он будет использоваться для выполнения того, что я пытаюсь выполнить? –

+0

Я использую _run_ цель плагина antrun для копирования и перемещения каталогов, так что, возможно, вы могли бы собрать все ваши файлы (банки, файлы cfg и т. Д.) В какую-то папку и оттуда перевести их? или просто используя cp/xcopy? –

ответ

23

Первая команда почти получает вас, что вам нужно - ПОМ в зависимости о котором идет речь. После того, как вы есть, что вы не должны нуждаться в дальнейшей 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.

0

По моему мнению, вы хотите загрузить все артефакты зависимостей в одну папку на своем локальном компьютере (без поиска в вашем локальном репозитории). Простой способ сделать это - создать простой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> 
+0

Нет pom.xml пожалуйста. –

26

Apache ivy может быть запущен как standalone 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 
+0

Это отличный ответ и работает очень хорошо, но если возможно, я хотел бы придерживаться только Maven. Благодаря! –

+0

Как добавить настраиваемый репозиторий Maven в эту команду Ivy? –

+1

@JanusTroelsen Используйте параметр «-settings», чтобы передать файл настроек плюща, указывающий на ваше репо. Пример файла настроек см .: http://stackoverflow.com/questions/4836011/use-public-maven-repository-with-ivy/ –

Смежные вопросы