Как мне изменить расположение папки внешнего интерфейса и настроить его в Vaadin14?

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

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

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

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


person VitorCruz    schedule 19.06.2020    source источник
comment
Я не понимаю, почему вы хотите это изменить.   -  person Simon Martinelli    schedule 20.06.2020
comment
Потому что это портит мою проектную организацию. Потому что это должно быть просто, но, похоже, это не так. Я также не понимаю, как я могу развернуть свое приложение, взорванное войной, и оно находит эту папку без каких-либо спецификаций.   -  person VitorCruz    schedule 20.06.2020
comment
Но ничего менять не надо. Плагин Vaadin делает все за вас, и развертывание работает нормально   -  person Simon Martinelli    schedule 20.06.2020
comment
Да, у меня есть, я не имею дело с новым приложением, поэтому нет, развертывание происходит не так гладко, как в проекте с нуля, и оставление внешнего интерфейса в корневом каталоге испортит его организацию. Я также подумал, что это нарушит и проекты с несколькими модулями, поэтому я думаю, что лучше поместить его в src / main, где исходный код должен быть в проекте maven, и оставить конфигурацию явной, чтобы избежать проблем в будущем. Однако я не понимаю, как знание моих мотивов помогает вам ответить на мой вопрос.   -  person VitorCruz    schedule 21.06.2020
comment
В любом случае, я уже понял, как правильно изменить расположение папки, я не понимал, что делает плагин и как Vaadin работает с папкой внешнего интерфейса как в режиме разработки, так и в режиме prod, а документации для плагина нет, поэтому потребовалось какое-то время разобраться.   -  person VitorCruz    schedule 21.06.2020


Ответы (1)


Ваадин по-разному использует папку внешнего интерфейса как в режиме разработки, так и в рабочем режиме. В производственной среде он создает интерфейс, используя цель 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, который ссылается непосредственно на исходные файлы проекта, так что любые сделанные в них изменения могут быть отражены немедленно, и поэтому нет необходимости любой конфигурации в web.xml или прослушивателе контекста.

Режим разработки представляет собой своего рода взлом с папкой внешнего интерфейса, чтобы сделать разработку более плавной, а режим prod компилирует все, начиная с интерфейса, в минифицированный файл, обслуживаемый сервлетом Vaadin, поэтому только в режиме prod внешний интерфейс переходит в файл войны. В первом случае необходимо использовать 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> 

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

person VitorCruz    schedule 21.06.2020