Parent POM: общий доступ к файлам конфигурации между дочерними проектами - PullRequest
0 голосов
/ 15 сентября 2018

В настоящее время я создаю родительский 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 конкретного случая будет действительно полезным!

...