June 29, 2011

Свои библиотеки в локальном Maven репозитории

      Используемые библиотеки вымышлены. В ходе экспериментов никто не пострадал.
    Если необходимо в приложение, использующее maven, "засунуть" свою или любую другую jar-библиотеку, то как обычно есть два пути: простой и правильный.
    Начнём с простого. Берём и нагло добавляем зависимость в свой pom.xml:

    com.ua.super.libs
    libx
    1.0
    system
    /home/alex/proj/com/ua/super/libs/libx-1.0.jar

   Что характерно: значение "system" для параметра "scope", а так же полный путь к библиотеке для параметра "systempath". После этого "докачиваем" все объявленные зависимости и успокаиваемся. До определённого момента. Что это за момент, станет ясно тогда, когда придет час жестокой расплаты компиляции. После коварного "SUCCESSFUL BUILD" придет ехидный "ОБЛОМИСЬ!", т.к. в скомпилированный архив библиотека включена не будет, а использовать надо было правильный способ добавления библиотеки. Именно его мы и выберем.
   Второй способ состоит из целых 2-х основных этапов и одного дополнительного.
    Этап 1. Добавить библиотеку в локальный репозиторый maven:
mvn install:install-file -Dfile=/home/alex/proj/com/ua/super/libs/libx-1.0.jar -DgroupId=ua.cn.stu.super.libs -DartifactId=libx -Dversion=1.0 -Dpackaging=jar
    Если внимательно посмотреть на список параметров и предыдущий листинг зависимости, то всё станет ясно и не так страшно.
    Этап 2. Описать зависимость. Зависимость в данном случае объявляется как и в предыдущем, только писать на целые 2 строки меньше. Да и к локальной машине жесткой привязки нет.

    com.ua.super.libs
    libx
    1.0

    Что изменилось: убежали параметры "scope" и "systempath".
    [Этап 3]. Если добавляемая библиотека обкатана, отлажена и готова окунуться в суровые будни, то дальше читать особого смысла нет. Если же её текущая версия находится на стадии разработки/доработки, то после каждой её компиляции, нужно будет обновлять её в репозитории. Можно испльзовать все тот же 'mvn install' или решить задачу "в лоб", а именно применить ручное копирование библиотеки на её законное место в репозитории:
cp -i /home/alex/proj/com/ua/super/libs/libx-1.0.jar /home/alex/.m2/repository/com/ua/super/libs/libx-1.0.jar
    Вот, собственно, и всё.

No comments:

Post a Comment