Поздравления всем.
Хочу поделиться с сообществом небольшим велосипедом — расширением для Maven, позволяющим получать доступ к репозиториям с настраиваемой структурой.
Сначала я расскажу вам, как я дошёл до этого момента.
Во время работы над проектом мне пришла в голову мысль, что JavaScript-зависимости вроде JQuery ничем не контролируются, и при обновлении приходится скачивать библиотеки вручную, что совершенно не впечатляет. И вот появилось дикое желание найти какой-нибудь менеджер зависимостей но для яваскрипта.
Прежде всего в своих поисках я наткнулся Бауэр но необходимость введения дополнительного шага в процесс сборки была пугающей, поскольку node.js находится в зависимостях.
Потом я вспомнил про CDN, с которого можно бесплатно скачать js-библиотеки (например jquery на Google CDN: http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js ).
Поскольку в проекте для сборки используется maven, то логичной идеей было поставить его на место этих библиотечных депозитов.
Но все оказалось не так просто.
Дело в том, что структура файловой системы CDN отличается от стандартной для maven. После 2 часов поиска решения в интернете решения не нашлось, поэтому я решил написать свой велосипед. Если я вас еще не утомил, то прошу под кат. В процессе поиска готовых решений было замечено, что для maven можно написать расширение, обрабатывающее собственный тип репозиториев.
Правда, несмотря на то, что везде было написано, что это можно сделать, нигде не было написано, как это сделать.
Только один раз промелькнуло, что для этой цели используется интерфейс RepositoryConnectorFactory. Я быстро набросал простой класс, реализующий этот интерфейс:
Однако после подключения расширения к проекту чуда не произошло — расширение не вызывалось, а мавен продолжал жаловаться на неподдерживаемый тип репозитория.@Component(role = RepositoryConnectorFactory.class, hint = "custom") public class CustomRepositoryConnectorFactory implements RepositoryConnectorFactory, Service { @Override public RepositoryConnector newInstance(RepositorySystemSession session, RemoteRepository repository) throws NoRepositoryConnectorException { System.out.println("CustomRepositoryConnectorFactory.newInstance()"); return null; } @Override public int getPriority() { return 1; } @Override public void initService(ServiceLocator locator) { } }
Как выяснилось позже, для корректной работы расширения необходимо сгенерировать описание компонента в файле META-INF/plexus/comComponents.xml. Чтобы создать его, вы можете использовать плагин plexus-comComponent-metadata, который будет анализировать аннотации классов и создавать этот волшебный файл.
<plugin>
<groupId>org.codehaus.plexus</groupId>
<artifactId>plexus-component-metadata</artifactId>
<version>1.5.5</version>
<executions>
<execution>
<goals>
<goal>generate-metadata</goal>
</goals>
</execution>
</executions>
</plugin>
После включения генерации компонент.xml и установки плагина в локальный репозиторий все заработало.
Сейчас я вам расскажу, как пользоваться этим бардаком.
Первым делом подключаем репозиторий с плагином (пока выложил его в свой репозиторий, в будущем подумаю как разместить в Maven Central): Теги: #java #maven #программирование #java
-
Еще Одна Фитолампа На Ардуино
19 Oct, 24 -
Обзор Azure-Iaas № 16 (Май)
19 Oct, 24 -
Как Работают Пули В Видеоиграх?
19 Oct, 24 -
Какие К Черту Социальные Сети?
19 Oct, 24 -
Poolcoin — Новая Криптовалюта
19 Oct, 24 -
Облако Css3 3D-Преобразований
19 Oct, 24 -
Знакомьтесь: Яндекс.icq
19 Oct, 24