2010-08-08 2 views
2

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

root pom/project1 
root pom/project2 

и я бегу mvn dependency:copy-dependencies, я в конечном итоге с зависимостями:

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

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

ответ

1

Вам нужно будет настроить плагин зависимостей, чтобы скопировать depdendencies в определенное место. Это можно сделать с помощью свойства конфигурации 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 assembly plugin

Документация говорит:

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

+0

Спасибо! Это похоже на то, что мне нужно. – Greg

1

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

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

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

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

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

<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> 

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

+0

Я собираюсь попробовать плагин сборки, спасибо! – Greg

+0

@Greg вы нашли способ сделать это с помощью плагина сборки? – herau

+0

@herau Я не помню, что я делал в то время, чтобы решить эту проблему, но если бы я делал это снова с тем, что я узнал за последние несколько лет, я бы использовал плагин сборки. Вам просто нужно добавить новый модуль maven на корневом уровне, вы можете просто называть его «сборкой» или тем, что хотите. Вы бы включать в себя все другие модули в качестве зависимостей в файле пом Ассамблеи проекта, а затем сборка дескриптора будет включать в себя что-то вроде: \t \t \t \t \t выполнения \t \t \t / \t Это должно закрыть вас. – Greg

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