В настоящее время я создаю родительский POM со всей необходимой конфигурацией в качестве основы для всех моих личных проектов. Конечная цель состоит в том, чтобы иметь небольшие дочерние проекты (= с небольшой конфигурацией) и легче загружать проекты, просто наследуя родительский POM.
Но я сталкиваюсь с проблемами с плагинами, которым требуются внешние файлы для конфигурации (как maven-assembly-plugin
, показанный ниже в моем примере). Я хотел бы иметь только один внешний файл (файл дескриптора для maven-assembly-plugin
) , общий для всех дочерних проектов , и не переопределять один и тот же файл во всех моих дочерних проектах.
Вот полный пример.
Пример с maven-assembly-plugin
Мой родительский POM (my-group-id:parent:1.0.0:pom
), определяющий конфигурацию для maven-assembly-plugin
, выглядит следующим образом:
<project>
<groupId>my-group-id</groupId>
<artifactId>parent</artifactId>
<version>1.0.0</version>
<packaging>pom</packaging>
<build>
<pluginManagement>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.1.0</version>
<executions>
<execution>
<id>create-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<descriptors>
<descriptor>src/assembly/bin.xml</descriptor>
</descriptors>
</configuration>
</execution>
</executions>
</plugin>
</pluginManagement>
</build>
</project>
Если я хочу, чтобы все дочерние проекты имели конфигурацию maven-assembly-plugin
, определенную в родительском проекте, я должен написать следующее (пример для дочернего проекта child1
):
<project>
<parent>
<groupId>my-group-id</groupId>
<artifactId>parent</artifactId>
<version>1.0.0</version>
</parent>
<artifactId>child1</artifactId>
<version>0.0.1</version>
<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
Но, как я уже говорил во введении: с этой конфигурацией для каждого дочернего элемента я должен создать файл дескриптора (src/assembly/bin.xml
) в своем собственном проекте.
Более того, оказывается, что все мои дочерние проекты имеют один и тот же файл bin.xml
. Я сохраню вам содержимое, но для информации упаковка - это всегда .tar.gz
архив с внешними библиотеками, разделенными в папке lib
.
Я просто хочу унаследовать родительский POM, не заботясь о том, как выполняется сборка в моих дочерних проектах. Общий файл дескриптора (bin.xml
), кажется, является решением, но я не вижу, как поделиться им во всех дочерних проектах. В любом случае, я не хочу иметь bin.xml
на дочерний проект.
Вопрос может быть расширен и касается не только конфигурации maven-assembly-plugin
, поскольку существуют другие плагины, настраиваемые с помощью внешних файлов (например, docker-maven-plugin
, где можно указать Dockerfile
). Но, по крайней мере, поиск решения для maven-assembly-plugin
конкретного случая будет действительно полезным!