Spring Boot Layered jar: извлечение слоев. xml для разделения зависимостей - PullRequest
0 голосов
/ 06 августа 2020

Я начинаю понимать возможности цели переупаковки в spring-boot-maven-plugin. Это выглядит многообещающе, но мне нужно немного его настроить.

Я легко могу это сделать, создав файл layers.xml где-то в моем проекте, но проблема в том, что у меня есть не только 1 проект, а скорее полдюжины. Все проекты нуждаются в одинаковом наслоении, но я действительно не хочу копировать одну и ту же конфигурацию для каждого проекта, в котором я хочу ее использовать.

Красивым решением было бы извлечь эту конфигурацию файл в отдельную банку, например, и пусть плагин берет файл конфигурации оттуда, но я не вижу способа это сделать. Есть ли другое решение, которое не требует копирования файла конфигурации в каждый мой проект?

К сожалению, хотя проекты, которые у меня есть, используют один и тот же родительский элемент, но не находятся в одном и том же многомодульном проекте .

Ответы [ 2 ]

0 голосов
/ 07 августа 2020

Мне удалось найти решение.

Перед тем как задать вопрос, моя spring-boot-mave-plugin конфигурация выглядела примерно так:

            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <layers>
                        <enabled>true</enabled>
                    </layers>
                </configuration>
                <executions>
                    <execution>
                        <id>repackage</id>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                        <phase>package</phase>
                        <configuration>
                            <layers>
                                <enabled>true</enabled>
                                <configuration><!-- something like classpath:layers.xml --></configuration>
                            </layers>
                            <classifier>exec</classifier>
                        </configuration>
                    </execution>
                </executions>
                <dependencies>
                    <dependency>
                        <groupId>artifact</groupId>
                        <artifactId>with-layers.xml</artifactId>
                        <version>...</version>
                    </dependency>
                </dependencies>
            </plugin>

Решение становится на один шаг более запутанным, поскольку в maven-dependency-plugin, который загружает вышеупомянутую зависимость и распаковывает ее в папку сборки с такой конфигурацией:

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <version>3.1.1</version>
                <executions>
                    <execution>
                        <id>copy-shc-build-tools</id>
                        <goals>
                            <goal>unpack</goal>
                        </goals>
                        <phase>package</phase>
                        <configuration>
                            <artifactItems>
                                <artifactItem>
                                    <groupId>artifact</groupId>
                                    <artifactId>with-layers.xml</artifactId>
                                    <version>...</version>
                                    <type>jar</type>
                                    <outputDirectory>${project.build.directory}</outputDirectory>
                                    <includes>**/layers.xml</includes>
                                </artifactItem>
                            </artifactItems>
                        </configuration>
                    </execution>
                </executions>
                <configuration>
                    <overWriteReleases>false</overWriteReleases>
                    <overWriteSnapshots>true</overWriteSnapshots>
                </configuration>
            </plugin>

В свою очередь, строка <configuration><!-- something like classpath:layers.xml --></configuration> становится <configuration>${project.build.directory}/layers/layers.xml</configuration>.

0 голосов
/ 07 августа 2020

В документации для Spring Boot Maven Plugin указано, что вы можете установить путь к layers.xml вручную, так почему бы не сделать так, чтобы все pom.xml указывали на одно и то же место?

<project>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>2.3.2.RELEASE</version>
                <configuration>
                    <layers>
                        <enabled>true</enabled>
                        <configuration>${project.basedir}/../layers.xml</configuration>
                    </layers>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

/../ означает на один уровень выше от каталога проекта. Допустим, у вас есть несколько проектов в одном каталоге, поместите туда layers.xml, и он будет работать.

Другой подход может заключаться в повторном использовании объявления Maven Plugin, перемещая его в так называемый родительский ПОМ . Это метод, при котором общие / разделяемые части файлов POM серии проектов перемещаются в один файл POM (родительский POM). Вот пример

Maven - Как создать многомодульный проект

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