Мы поддерживаем проект с бэкендом, разработанным с помощью Spring Boot, и с веб-интерфейсом, разработанным с помощью React. Проект имеет один модуль, поэтому он имеет родительский pom и дочерний pom для внутреннего интерфейса. Для построения внешнего интерфейса мы используем exec-maven-plugin, объявленный в родительском pom, например:
<profile>
<id>release</id>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.6.0</version>
<inherited>false</inherited>
<executions>
<execution>
<id>exec-npm-run-build</id>
<phase>prepare-package</phase>
<configuration>
<workingDirectory>${project.basedir}/co-frontend</workingDirectory>
<executable>npm</executable>
<arguments>
<argument>run</argument>
<argument>build</argument>
</arguments>
</configuration>
<goals>
<goal>exec</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
, а для упаковки всего проекта (я полагаю) мы используем spring-boot-maven-plugin, объявленный в backend pom:
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring.boot.version}</version>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
Вопрос в том, каков порядок сборки переднего и заднего плана. Похоже, обновленный фронт волшебно упакован в получившуюся банку. Но мы не видим никаких прямых указаний относительно того, когда и почему артефакты внешнего интерфейса попадают в общую папку в банке. Также сбивает с толку тот факт, что согласно журналу сборки exec-maven-plugin вызывается последним после того, как jar уже собран. Как мы можем быть уверены, что мы действительно получим последнюю версию лицевой стороны каждой сборки банки внутри банки?