Как выполнить горячее повторное развертывание неактивного проекта 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>
Другие вопросы по тегам