2010-02-09 1 views
4

Я пытаюсь написать pom.xml, который позволит мне запустить команду локально и получить все зависимости, которые есть в моем приложении jruby Rails. Я вижу две разные конфигурации, хотя и я не совсем уверен, что использовать (поскольку я не человек java вообще)с помощью maven для управления java-зависимостями в приложении jruby rails

Во-первых, у многих Pom я вижу только тег под корнем pom.xml, который перечисляет все зависимости. Однако у этого нет никакой информации о том, где они хранятся и т. Д., Поэтому я чувствую, что это не то, что я хочу (мне нужно скопировать их в мой рельс lib dir)

Второй вариант, я видение в документах mvn заключается в использовании плагина maven-dependency, который больше похож на то, что я ищу. Я предполагаю, что мой outputDirectory будет чем-то вроде lib

Так что я не совсем понимаю, для чего предназначена цель списка зависимостей первого варианта. Все, что я хочу, это mvn, чтобы скопировать мои банки локально (а затем, в конце концов, когда мой сервер CI выполняет развертывание). Может ли кто-нибудь указать мне в правильном направлении?

Первый вариант

<project> 
    <dependencies> 
    <dependency> 
    <groupId>commons-lang</groupId> 
    <artifactId>commons-lang</artifactId> 
    <version>2.4</version> 
    </dependency> 
</project> 

Второй вариант

<project> 
    <build> 
    <plugins> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-dependency-plugin</artifactId> 
     <configuration> 
      <artifactItems> 
      <artifactItem> 
       <groupId>[ groupId ]</groupId> 
       <artifactId>[ artifactId ]</artifactId> 
       <version>[ version ]</version> 
       <type>[ packaging ]</type> 
       <classifier> [classifier - optional] </classifier> 
       <overWrite>[ true or false ]</overWrite> 
       <outputDirectory>[ output directory ]</outputDirectory> 
       <destFileName>[ filename ]</destFileName> 
      </artifactItem> 
      </artifactItems> 
      <!-- other configurations here --> 
     </configuration> 
     </plugin> 
    </plugins> 
    </build> 
</project> 

ответ

1

Во-первых, многие из Pom-х я вижу просто тег под корень pom.xml, что список все зависимости. Однако у этого нет никакой информации о том, где они хранятся и т. Д., Поэтому я чувствую, что это не то, что я хочу (мне нужно скопировать их в мой рельс lib dir)

Это традиционный способ объявить и использовать зависимости от проекта Java. Зависимости , объявленные под элементом <dependencies>, загружаются из «удаленного репозитория» и устанавливаются в ваш «локальный репозиторий» (по умолчанию ~/.m2/repository), а затем обрабатываются артефакты. Проекты Maven (по крайней мере, Java) не используют локальную папку lib/ для своих зависимостей.

Второй вариант, я вижу, что в mvn docs используется плагин maven-dependency, который больше похож на то, что я ищу. Я предполагаю, что то, что мой OutputDirectory будет что-то вроде Lib

maven dependency plugin позволяет взаимодействовать с артефактами и скопировать/распаковать их из локальных или удаленных хранилищ в указанное место. Таким образом, его можно использовать для получения некоторых зависимостей и копирования их, давайте скажем lib/. На самом деле, он имеет несколько целей, позволяющих сделать это:

  • dependency:copy принимает список артефактов, определенных в разделе конфигурации плагина и копирует их в указанное место, переименовав их или раздевая версию при желании , Эта цель может разрешить артефакты из удаленных репозиториев, если они не существуют в локальной сети.
  • dependency:copy-dependencies принимает список проектов прямых зависимостей и, возможно, транзитивно зависимостей и копирует их в указанное место , зачистке версию при желании. Эта цель также может быть выполнена из командной строки .

Первый гол будет использовать настройку, описанную в вашем втором варианте. Вторая цель будет использовать стандартные зависимости проекта, которые вы описали в своем первом варианте. Оба подхода будут работать.

Проблема в том, что я не знаю точно, что такое приложение JRuby Rails, каков рабочий процесс разработки, как создать такое приложение и т. Д., Поэтому я не знаю точно, что вам нужно делать, и, следовательно, что было бы лучшим способом реализовать это с Maven.

Итак, я немного искал Google и нашел this post, который показывает другой подход, основанный на командах ОС (с использованием плагина maven exec), и имеет полный набор pom.xml, выполняющий некоторые другие функции. Возможно, вам стоит взглянуть на него и использовать его как отправную точку, а не изобретать все. На самом деле это мое предложение.

+0

wow Спасибо за ссылку, я искал более часа, чтобы найти что-то в этом роде. Кроме того, thx для информации. Если я правильно понял, то: Если я определяю свои зависимости в корне проекта в pom в теге , я не использую плагин maven-dependency и я (где-то) описываю в моем пом, где копировать их. Если я не определяю свои зависимости в теге корневых зависимостей, а скорее в плагине зависимости от maven, я указываю каждую зависимость как артефакт, включая, где я хочу, чтобы он копировался? – brad

+0

hmmm ... К сожалению, это больше похоже на pom для развертывания приложения, где они создают войну, файлы и копируют файлы на эту войну. Не совсем то, что я хочу, но я уверен, что понимаю, что мне нужно. – brad

+1

@brad Добро пожаловать. Теперь о вашем вопросе: не совсем. В обоих случаях вы должны использовать плагин maven-dependency, но у него есть * несколько целей (способы вызвать его, если хотите), и вы просто будете использовать разные цели. Как указано, 'dependency: copy' принимает список артефактов, определенных в разделе конфигурации плагина. С другой стороны, 'dependency: copy-dependencies' принимает список прямых зависимостей проекта (...). Я не предоставил фрагмент конфигурации, потому что думал, что это не будет актуальным. Если вы действительно хотите посмотреть, как это можно сделать, дайте мне знать. –

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

  • Нет связанных вопросов^_^