Pull to refresh

ExtJs как maven зависимость

Reading time2 min
Views6.9K

Зачем


Есть у меня несколько проектов на Java использующих в виде web-клиента ExtJs приложения. Библиотека прямо скажем не маленькая. Полный архив более 60M мегабайт весит, и приложениям находящимся в активной разработке приходится все это тащить и скачивать из CVS. А если к последнему добавить медленный интернет, то все становится совсем грустно. В приложение еще и десятка классов нет, а вес уже за полсотни мегабайт.

Что


Появилась идея оформить эту библиотеку в виде подключаемого модуля. После определенной доли RTFM`а было решено сделать это через мавен.
Есть у него такая вещь, как war-layout. Позволяет «склеивать» несколько приложений в одно, причем можно четко указать что включать, а что нет.

Как


  1. Создание overlay-проекта

    Тут все просто.
    1. Создаем пустое web-приложение.
    2. В папку
      src/main/webapp/lib/extJs/
      
      (Пути относительно корня проекта. Могут зависеть от вашей конфигурации и вашего желания быть ССЗБ)
      распаковываем архив с ExtJs, скаченный с сайта сенчи.
      Внимание! На момент написания поста архив содержал папку ext-НОМЕР_ВЕРСИИ_ExtJs. Данная папка нам не нужна. Распаковывать надо именно её содержимое. Это позволит нам для любой версии extJs иметь одинаковые пути. Управлять же версией мы будем в другом месте.
    3. В pom.xml в настройках проекта не забываем прописать
      <version>НОМЕР_ВЕРСИИ_ExtJs-RELEASE</version>
      
      и
      <packaging>war</packaging>
      

      Теперь нам достаточно выполнить
      mvn clean install
      
      для загрузки в локальный мавен репозиторий, или как у нас — настроить Jenkins на мониторинг CSV-репозитория и автоматическую загрузку новых версий в nexus.

  2. Подключение к другому проекту

    В pom.xml надо указать зависимость от выше созданного проекта
            <!--Overlays-->
    		<dependency>
    			<groupId>org.me</groupId>
    			<artifactId>extjs-overlay</artifactId>
    			<type>war</type>
    			<version>4.2-RELEASE</version>
    			<scope>runtime</scope>
    		</dependency>
    

    и настроить плагин
    <plugin>
    	<groupId>org.apache.maven.plugins</groupId>
    	<artifactId>maven-war-plugin</artifactId>
    	<version>2.3</version>
    	<configuration>
    		<overlays>
    			<overlay>
    				<groupId>org.me</groupId>
    				<artifactId>extjs-overlay</artifactId>
    			</overlay>
    		</overlays>
    	</configuration>
    </plugin>
    

    Там же можно указать какие файлы не включать в сборку.
    <plugin>
    	<groupId>org.apache.maven.plugins</groupId>
    	<artifactId>maven-war-plugin</artifactId>
    	<version>2.3</version>
    	<configuration>
    		<overlays>
    			<overlay>
    				<groupId>org.me</groupId>
    				<artifactId>extjs-overlay</artifactId>
    				 <excludes>
    					<exclude>lib/extjs/*</exclude>
    				</excludes>
    			</overlay>
    		</overlays>
    	</configuration>
    </plugin>
    


Итог


Мы получили возможность обновлять версию ExtJs простым изменением версии зависимости в pom.xml. На другой чаше весов не слишком быстрая обработка мавеном оверлеев, но это решается путем выкидывания всего не нужного. Более того если мы решим перегрузить какие-то базовые функции ExtJs нам не надо будет копировать код во все проекты.

Документация maven war plugin
Tags:
Hubs:
Total votes 6: ↑5 and ↓1+4
Comments4

Articles