Vaadin по-разному использует папку внешнего интерфейса как в режиме разработки, так и в режиме производства. В производственной среде он создает интерфейс с использованием цели build-frontend
. Плагин Vaadin Maven не имеет надлежащей документации, лучшее место, которое я нашел, объясняющее, что делает каждая цель, находится здесь: https://vaadin.com/docs/v14/flow/production/tutorial-production-mode-advanced.html. На этой странице объясняется, что build-frontend
отвечает за сборку и размещение обработанного внешнего интерфейса в WEB-INF \ classes \ META-INF \ VAADIN \ build в производственном режиме.
Режим разработки сильно отличается, инструкции по разработке объясняют что, если вы не используете встроенный сервер, вам следует настроить свою IDE для выполнения prepare-frontend
цели перед развертыванием: https://vaadin.com/docs/v14/flow/workflow/run-on-server-intellij.html. Но prepare-frontend
просто создает пустую папку внешнего интерфейса в target, как он находит файлы внешнего интерфейса, если папка пуста и ничего не копируется в папку war exploded? Ответ: когда вы запускаете приложение, у Vaadin есть DevModeInitializer, который создает файл generated-flow-imports.js
в target / frontend, который ссылается непосредственно на исходные файлы проекта, так что любые изменения, внесенные в них, могут быть отражены немедленно, и поэтому есть нет необходимости в какой-либо конфигурации в Интернете. xml или прослушивателе контекста.
Режим разработки - это своего рода взлом с папкой внешнего интерфейса, чтобы сделать разработку более плавной, а в режиме продакшена все от внешнего интерфейса компилируется в минимизированный файл, обслуживаемый Сервлет Vaadin, поэтому только в режиме prod интерфейс переходит в файл war. В первом случае необходимо использовать prepare-frontend
, во втором - также build-frontend
. Итак, чтобы изменить расположение папки внешнего интерфейса, необходимо изменить конфигурацию плагина в этих двух целях:
<plugin>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-maven-plugin</artifactId>
<version>${vaadin.version}</version>
<executions>
<execution>
<goals>
<goal>prepare-frontend</goal>
</goals>
</execution>
</executions>
<configuration>
<frontendDirectory>${project.basedir}/src/main/frontend</frontendDirectory>
</configuration>
</plugin>
<profiles>
<profile>
<!-- Production mode is activated using -Pproduction -->
<id>production</id>
<properties>
<vaadin.productionMode>true</vaadin.productionMode>
</properties>
<dependencies>
<dependency>
<groupId>com.vaadin</groupId>
<artifactId>flow-server-production-mode</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>build-frontend</goal>
</goals>
<phase>compile</phase>
</execution>
</executions>
<configuration>
<frontendDirectory>${project.basedir}/src/main/frontend</frontendDirectory>
</configuration>
</plugin>
</plugins>
</build>
</profile>
Таким образом, модификация будет работать как в режиме разработки, так и в рабочем режиме.