использование maven для управления зависимостями java в приложении jruby rails - PullRequest
4 голосов
/ 10 февраля 2010

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

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

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

Так что я не до конца понимаю, для чего предназначен список зависимостей первого варианта. Все, что я хочу, это mvn, чтобы скопировать мои jar-файлы локально (и затем, когда мой 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 Ответ

1 голос
/ 10 февраля 2010

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

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

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

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

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

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

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

Так что я немного погуглил и нашел этот пост , который показывает другой подход, основанный на командах ОС (использующий плагин maven exec) и имеет полный pom.xml, делающий некоторые другие вещи , Может быть, вы должны взглянуть на это и использовать его в качестве отправной точки, а не изобретать все заново. Это мое предложение на самом деле.

...