У меня есть веб-приложение на Java, которое использует Netbeans с Ant и Ivy для управления и Tomcat в качестве сервера.
Версия Tomcat: 8.0.43
У меня установлен флажок «Скомпилировать при сохранении», чтобы при каждом изменении кода приложение развертывалось заново.
Итак, я делаю изменение, и затем Netbeans автоматически повторно развертывает приложение, чтобы изменения можно было увидеть в браузере при тестировании.
Это перераспределение занимало 1-3 секунды.
Недавно я добавил большую библиотеку с большим количеством зависимостей в свое приложение ( Apache Tika )
В результате теперь повторное развертывание при тестировании занимает гораздо больше времени (например, 30 секунд).
Могу ли я что-нибудь сделать, чтобы сократить время повторного развертывания до нескольких секунд?
Это (соответствующая часть) распечатывается в журнале при повторном развертывании приложения (я установил для ведения журнала StandardContext значение FINE
):
19-Jun-2019 12: 08: 52.996 INFO [http-apr-8080-exec-4]
org.apache.catalina.core.StandardContext.reload Перезагрузка контекста с помощью
имя [] началось
19-Jun-2019 12: 08: 53.055 FINE [http-apr-8080-exec-4]
org.apache.catalina.core.StandardContext.listenerStop Отправка
события остановки приложения
19-Jun-2019 12: 08: 53.125 FINE [http-apr-8080-exec-4]
org.apache.catalina.core.StandardContext.stopInternal Processing
стандартное отключение контейнера
19-Jun-2019 12: 08: 53.171 FINE [http-apr-8080-exec-4]
org.apache.catalina.core.StandardContext.resetContext resetContext
Каталина: j2eeType = WebModule, имя = // локальный /, J2EEApplication = нет, = нет сервера J2EE
19-Jun-2019 12: 08: 53.171 FINE [http-apr-8080-exec-4]
org.apache.catalina.core.StandardContext.stopВнутренняя остановка
полная
19-Jun-2019 12: 08: 53.171 FINE [http-apr-8080-exec-4] org.apache.catalina.core.StandardContext.startInterning Starting ROOT
19-Jun-2019 12: 08: 53.627 FINE [http-apr-8080-exec-4]
org.apache.catalina.core.StandardContext.startInternal Processing
запуск стандартного контейнера
19-Jun-2019 12: 09: 11.856 FINE [http-apr-8080-exec-4] org.apache.catalina.core.StandardContext.setPublicId
открытый идентификатор дескриптора развертывания для 'null'
19-Jun-2019 12: 09: 12.200 FINE [http-apr-8080-exec-4]
org.apache.catalina.core.StandardContext.listenerStart Настройка
слушатели событий приложения
19-Jun-2019 12: 09: 12.405 FINE [http-apr-8080-exec-4]
org.apache.catalina.core.StandardContext.startInternal Starting
завершено
19-Jun-2019 12: 09: 12.405 ИНФО [http-apr-8080-exec-4]
org.apache.catalina.core.StandardContext.reload Завершение перезагрузки с именем [] завершено
Как видите, длительное время ожидания происходит при вызове StandardContext.reload
.
В частности, между:
Обработка стандартного запуска контейнера
И
Установка открытого идентификатора дескриптора развертывания в 'null'
Это соответствует коду между строками 4325 и 4467 в StandardContext.start()
исходном коде.
Но я до сих пор не уверен, что причина в этой части кода.
Дополнительная информация:
Файлы jar
, от которых зависит мое приложение, находятся в папке libraries
.
Все jar
файлы, загруженные диспетчером зависимостей, хранятся в WEB-INF/lib
.
В моей папке libraries
ничего не меняется, и поэтому я думаю, что после первоначального добавления библиотеки не должно быть дополнительного времени, необходимого для повторного развертывания.
Как мне изменить настройки, чтобы я мог повторно развернуть приложение через несколько секунд?
Или это время повторного развертывания неизбежно при включении такого большого количества библиотек?