Совокупные зависимости в многомодульном проекте Maven
Я пытаюсь выяснить, как объединить мои 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 ответа
Вам нужно будет настроить плагин зависимостей для копирования зависимостей в определенное место. Это может быть сделано 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 в первую очередь предназначен для того, чтобы пользователи могли объединять выходные данные проекта вместе с его зависимостями, модулями, документацией сайта и другими файлами в один распространяемый архив.
Что я действительно хочу, так это то, что, если я запущу команду mvn в корневой папке pom, все зависимости будут скопированы в корневую папку pom / dependency. Есть ли свойство maven, которое дает мне выходной каталог корневого pom? (похожий на
${project.build.directory}
)?
Нет, потому что модули не должны знать об этом.
Я понимаю, что могу просто скопировать все папки зависимостей в одно и то же место после факта, но я надеялся на что-то более чистое.
Способ Maven будет использовать плагин сборки Maven и пользовательский дескриптор. Но если вы не знакомы с плагином сборки Maven и его форматом дескриптора, это будет непросто.
Менее понятный, но более простой подход заключается в настройке подключаемого модуля 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>
Но, как я уже сказал, это создает тесную связь между модулями и корневым проектом, что совсем нехорошо (и я бы не пошел дальше, включив вызов цели как часть сборки, модули должны оставаться независимыми, и вы должны иметь возможность построить один модуль без "проверки" родителя).