Очень часто вес приложения, которое мы выкладываем на сервер достигает неприлично больших размеров из-за включения в него всех нужных зависимостей. У меня в конечном итоге приложения занимают от 20 до 50 метров. Деплой таких war-ов на удаленный сервер, на Tomcat, дело не одной минуты, а при плохой связи и вовсе становится проблематичным. Класть библиотеки в ${tomcat.home}/lib дело очень неблагодарное и зачастую опасное. Мы на фирме немного погуглили и нашли очень приятное решение на DZone. Хочу с вами поделиться…
Сразу хочу сказать, что метод подходит прежде всего тем, кто разводит своих котов, а не пользуется услугами хостеров… хотя, тут все зависит какое
Один человек, некто Dapeng Liu, внимательно почитав документацию по API Tomcat, реализовал очень библиотечку, которую можно взять тут. Фактически библиотека представляет из себя имплементацию загрузчика приложений для кота.
Как это работает:
- Кладете данную библиотеку в ${tomcat.home}/lib
- В ${catalina.home} создается папка repo. В ней создаются папки с репозитариями. Например, когда используется hibernate, идет зависимость сразу от нескольких библиотек. Создаем директорию ${catalina.home}/repo/hibernate_3.3.0, в которую складываем все нужные библиотеки. Можно создать репозитарий сразу конкретного проекта и засунуть туда сразу все нужные библиотеки.
- Поправить описание контекста для вашего приложения. Теперь он должен выглядеть следующим образом:
<Context path="/testapp">
<Loader className='com.spiralcomms.tomcat.WebappLoader' />
<lib>spring_2.5.6</lib>
<lib>hibernate_3.3.0</lib>
</Context>
- Деплой приложения будет осуществляться указанным загрузчиком. При старте деплоя загрузчик будет искать в контексте все теги lib, находить по ним репозитории в папке ${catalina.home}/repo и включать в загрузку
Таким образом приложения резко худеют с 20-50 метров до полутора — двух, что несказанно влияет на скорость его заливки на сервер.
Конечно, такой процесс накладывает ограничение на разработчика. При выкладывании приложений он должен знать — добавились ли какие-нибудь библиотеки в приложение, чтобы обновить репозитарий.
Лично меня метод очень выручает когда до сервера слабый канал и идет плотная работа с заказчиком на предмет правок приложения. Требуется вносить правки и выкладывать их на сервер до 20 раз на день.
P.S. Оригинал описания найденного решения можно почитать тут.
Автор: alexey_lahtadir