Как выполнить горячее повторное развертывание неактивного проекта Maven через Jetty-Maven-плагин
Я пытаюсь оценить причал для быстрого развития или проекта, который в настоящее время работает на Tomcat. Моя конфигурация выглядит так
<plugin>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>9.2.3.v20140905</version>
<configuration>
<scanIntervalSeconds>3</scanIntervalSeconds>
<webApp>
<descriptor>${project.build.directory}/${project.build.finalName}/WEB-INF/web.xml</descriptor>
<resourceBases>
<directory>${basedir}/src/main/webapp</directory>
<directory>${basedir}/../SharedWeb/src/main/webapp</directory>
</resourceBases>
<allowDuplicateFragmentNames>true</allowDuplicateFragmentNames>
<contextPath>/test</contextPath>
</webApp>
</configuration>
</plugin>
У меня основная война в зависимости от войны SharedWeb через механизм наложения войны. Я указываю ресурсные базы для обоих проектов maven, чтобы изменения в ресурсах сканировались автоматически, перезагружались на лету и все работало нормально. Также, когда я собираю классы в основной войне, причал автоматически перезагружается, перезагружая последние изменения. Но когда я пытаюсь изменить какой-либо класс в проекте SharedWeb и скомпилировать его, класс не перезагружается. Мне просто интересно, есть ли способ сделать Embed Jetty для перезагрузки классов из SharedWeb автоматически? Я понимаю, что jetty-maven-plugin использует SharedWeb war из локального репозитория maven, поэтому мне нужно установить артефакт SharedWeb, чтобы увидеть какие-либо изменения. Так что у меня нет больших ожиданий, но, возможно, я что-то упустил
2 ответа
Иван,
Плагин использует классы и ресурсы из вашей войны за зависимость, а не из того, что вы добавили. Он просто говорит Jetty следить за этим местоположением и повторно развертывать его, если что-то в нем меняется - он НЕ помещает его в путь к классам.
Вы должны сказать Jetty использовать классы и ресурсы из проекта войны с зависимостями, а не артефакт войны.
Так что сделайте что-то вроде:
<plugin>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>9.2.3.v20140905</version>
<configuration>
<webApp>
<!-- tell jetty to use the classes from the dependency
webapp project directly -->
<extraClassPath>${basedir}/../SharedWeb/target/classes</extraClassPath>
<!-- tell jetty to use both this project's static
resources, and those of the dependency webapp project -->
<resourceBases>
<directory>${basedir}/src/main/webapp</directory>
<directory>${basedir}/../SharedWeb/src/main/webapp</directory>
</resourceBases>
</webApp>
<scanIntervalSeconds>3</scanIntervalSeconds>
<!-- tell jetty to watch the dependency webapp project classes
dir for changes -->
<scanTargets>
<scanTarget>${basedir}/../SharedWeb/target/classes/</scanTarget>
</scanTargets>
</configuration>
</plugin>
январь
Поскольку, кажется, нет хорошего предварительного ответа, который достаточно конкретен для этого вопроса (иначе <scanTarget>
) Я просто опубликую этот новый и подправлю заголовок, чтобы его было легче найти в будущем.
То, что вы ищете, это <scanTarget>
, так как это позволит вам настроить места сканирования для измененного содержимого, которое вызовет горячее повторное развертывание.
Jetty-Maven-плагин намеренно не настраивает это на заказ <resourceBases>
поскольку существует много законных вариантов использования, в которых это может привести к агрессивным / слишком частым / или бесконечным повторным развертываниям. Было решено, что лучше всего отказаться от "соглашения по конфигурации" для <scanTarget>
записи и позволяют разработчикам решать, что следует проверять на наличие изменений.
<plugin>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>9.2.3.v20140905</version>
<configuration>
...
<scanIntervalSeconds>3</scanIntervalSeconds>
<scanTargets>
<scanTarget>${basedir}/../SharedWeb/src/main/webapp/</scanTarget>
<scanTarget>${basedir}/../SharedWeb/target/classes/</scanTarget>
</scanTargets>
</configuration>
</plugin>