Совокупные зависимости в многомодульном проекте Maven - PullRequest
2 голосов
/ 08 августа 2010

Я пытаюсь выяснить, как объединить мои maven-зависимости в многомодульном проекте. Например, если у меня есть:

root pom/project1
root pom/project2

и я запускаю mvn dependency:copy-dependencies, я получаю зависимости:

root pom/project1/target/dependency
root pom/project2/target/dependency

Что мне действительно нужно, так это то, что, если я запущу команду mvn в корневой папке pom, все зависимости будут скопированы в root pom/dependency. Есть ли свойство maven, которое дает мне выходной каталог корневого pom? (похоже на ${project.build.directory})? Я понимаю, что могу просто скопировать все папки зависимостей в одно и то же место после факта, но я надеялся на что-то более чистое.

Ответы [ 2 ]

1 голос
/ 09 августа 2010

Что я действительно хочу, так это то, что, если я запускаю команду mvn в корневой папке pom, все зависимости будут скопированы в корневую папку pom / dependency.Есть ли свойство maven, которое дает мне выходной каталог корневого pom?(похоже на ${project.build.directory})?

Нет, потому что модули не должны знать об этом.

Я понимаю, что могу просто скопировать все папки зависимостейпосле того же факта, но я надеялся на что-то более чистое.

В Maven можно было бы использовать Плагин сборки Maven и пользовательский дескриптор.Но если вы не знакомы с плагином Maven Assembly и его форматом дескриптора, это будет непросто.

Менее понятным, но более простым подходом будет настройка плагина Maven Dependency скопировать зависимости в родительский проект, используя относительный путь.Примерно так:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-dependency-plugin</artifactId>
  <version>2.1</version>
  <configuration>
    <outputDirectory>../root_pom/target/dependency</outputDirectory>
  </configuration>
</plugin>

Но, как я уже сказал, это создает тесную связь между модулями и корневым проектом, что совсем нехорошо (и я бы не пошел дальше, включив вызов цели как частьсборки, модули должны оставаться независимыми, и вы должны иметь возможность собрать один модуль без "извлечения" родительского элемента).

1 голос
/ 08 августа 2010

Вам потребуется настроить плагин зависимостей для копирования зависимостей в определенное место.Это можно сделать с помощью свойства конфигурации outputDirectory.

<plugin>
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-dependency-plugin</artifactId>
   <executions>
      <execution>
         <id>copy-dependencies</id>
         <phase>package</phase>
         <goals>
            <goal>copy-dependencies</goal>
         </goals>
         <configuration>
              <outputDirectory>${outputDir}</outputDirectory>
         </configuration>
      </execution>
   </executions>
</plugin>

Но если вы пытаетесь сделать это для распространения, я бы порекомендовал вам создать сборку с помощью подключаемого модуля maven

Документация гласит:

Плагин сборки для Maven 2.0 в первую очередь предназначен для того, чтобы пользователи могли объединять выходные данные проекта вместе с его зависимостями, модулями, документацией сайта и другими файлами в один распространяемый файл.архив.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...