Как мне изменить расположение папки внешнего интерфейса и настроить его в Vaadin14? - PullRequest
1 голос
/ 20 июня 2020

Как мне изменить расположение папки внешнего интерфейса по умолчанию в проекте maven Vaadin 14 с ${project.basedir}/frontend на ${project.basedir}/src/main/frontend?

Кроме того, плагин Vaadin выводит папку внешнего интерфейса в выходной каталог сборки maven вместо войны. каталог, где я ожидал, что это будет.

Как заставить его работать, если я не сопоставил эту папку со своим файлом web. xml?

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

1 Ответ

0 голосов
/ 21 июня 2020

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> 

Таким образом, модификация будет работать как в режиме разработки, так и в рабочем режиме.

...