Как сделать локальный репозиторий maven

Обновлено: 07.07.2024

Если вам нужно подключить в maven-е какие-то свои библиотечки, которых нет в публичном Maven-репозитории, это делается в 3 шага:

1. Создать репозиторий

Нашу библиотечку нужно задеплоить — распаковать lib. Делается это такой командой (она записана в несколько строк только наглядности ради, так то, разумеется, вы пишите ее одной строкой):

mvn deploy:deploy-file
-Durl=file:///dev/project/repo/
-Dfile=somelib-1.0.jar
-DgroupId=com.example
-DartifactId=somelib
-Dpackaging=jar
-Dversion=1.0

groupId и artifactId — вы можете называть сами как хотите. Например, вы можете в качестве artifact id использовать название библиотечки, а в качестве group id — id в главном пакете, используемом в библиотеке.

The group and artifact id you’d have to make up yourself of course. For example pull the artifact id from the library name and the group id from the main package used inside the library.

Не забудьте добавить эту папку в систему контроля версий!

2. Определить репозиторий

Добавьте в свой pom.xml следующий код, чтобы дать Maven-у знать о только что созданном репозитории.

3. Определить зависимости

И наконец, подключите в pom.xml саму библиотечку. Ведь раньше вы только указали, где она будет лежать, а теперь уже показываете, что ее надо использовать в проекте, вот эту конкретную, с такими то идентификаторами:

Все просто и понятно ツ

Пример из жизни

Что мы и делаем. Можете попробовать сами.

Скачиваем исходный код, zip-ничек. Удаляем все "лишние" библиотеки, которые мавен осилит выкачать сам из общедоступных репозиториев. Должны остаться только:

Князев Алексей Александрович. Независимый программист и консультант.

Последняя дата изменения документа: 2013-07-08

Введение

Maven представляет собой межплатформенную систему сборки и управления проектами на языке Java. В отличии от императивного характера альтернативной системы Ant, Maven отличается декларативным подходом к описанию проекта. Декларативность означает, что в проектном файле Maven не описывается необходимая последовательность действий по выполнению той или иной цели. Вместо этого, кроме необходимых данных по идентификации данного проекта в системе репозиториев Maven, описываются необходимые зависимости от библиотек и других модулей проекта, а также указания на использование тех или иных плагинов,
влияющих на исполнение целей.

Декларативность и принятая структура описаний позволяет Maven быть по настоящему межплатформенной. Нигде не пишутся конкретные зависимости от конкретного расположения объектов в файловой системе. Все объекты зависимостей описываются через их систему идентификации в одном из репозиториев Maven. Единственным требованием для этого является наличие такой идентификации в репозитории, и эта задача тоже с успехом решается для любых объектов.

Идентификация объектов в репозиториях Maven основывается на значении трех параметров, называемых еще GAV-идентификацией по первым буквам их названий.

Таким образом, основную часть описания проекта в проектном файле pom.xml (Project Object Model) системы Maven составляет GAV-идентификация проекта. В остальном, для самых простых проектов, можно положиться на умолчания.

Система Maven может исполнять некоторый нерасширяемый набор целей на основе данных, описанных в проектном файле, в контексте той операционной системы, где работает Maven.

Основные исполняемые цели Maven (команды Maven)

Использование системы Maven часто сводится к выполнению следующего набора команд, которые можно назвать целями, по аналогии с другими системами сборки (Ant, make и пр.). В общем случае, работа с Maven может быть описана следующей командой (знак $ отображает стандартное приглашение в командной строке *nix):

Цель может быть одна из следующего списка.

  1. validate — проверяет корректность метаинформации о проекте
  2. compile — компилирует исходники
  3. test — прогоняет тесты классов из предыдущего шага
  4. package — упаковывает скомпилированые классы в удобноперемещаемый формат (jar или
    war, к примеру)
  5. integration-test — отправляет упакованные классы в среду интеграционного тестирования и
    прогоняет тесты
  6. verify — проверяет корректность пакета и удовлетворение требованиям качества
  7. install — загоняет пакет в локальный репозиторий, откуда он (пакет) будет доступен для
    использования как зависимость в других проектах
  8. deploy — отправляет пакет на удаленный production сервер, откуда другие разработчики
    его могут получить и использовать

Проектный файл Maven

Проектный файл Maven представляет собой файл формата XML с названием pom.xml (Project Object Model).

Поиск архетипов (archetype)

Проектный файл можно написать самому, а можно воспользоваться генерацией на основе выбора так называемого архетипа (archetype, шаблона проекта).

Генерация простейшего проектного файла

Чтобы создать простейший проектный файл можно воспользоваться архетипом maven-archetype-quickstart. Для этого, выберите директорию для создания проекта и выполните следующую команду, определив по-своему параметры GAV-идентификации.

Команда должна быть написана в одну строчку. Здесь, она разнесена по строкам для удобства чтения.

В некоторых случаях требуется добавить опцию уточнения версии архетипа, например: -DarchetypeVersion=8.2.0.Final

Если вы укажете все эти определения (-D), то выполнение цели archetype:generate запросит вас только подтвердить введенные данные. Для подтвержения введите Y и нажмите Enter, или просто нажмите Enter.

В результате выполнения этой команды мы получим директорию с именем артефакта (test-1) внутри которой будет находится проектный файл pom.xml и начальная структура поддиректорий, характерная для проектов Maven.

Ниже приведено содержимое сгенерированного файла pom.xml.

В данном проектном файле мы видим раздел описания GAV-идентификации и видим описание раздела зависимостей, в который, на начальном этапе, входит только
зависимость от библиотеки JUnit. Каждая зависимость включается внутри отдельного тега dependency.

Тег packaging указывает на результирующий тип файла, который система Maven должна создать при исполнении цели package. Допустимые значение — jar, war и ear. По-умолчанию используется значение jar.

Теги name и url не используются системой Maven и нужны для разработчиков, открывших код проектного файла. Тег name описывает
человеческое имя проекта, а тег url — сайт размещения проекта.

Теперь рассмотрим структуру поддиректорий, которая генерируется для проекта Maven.

Обычно, структура директорий пакетов unit-тестов соответствует структуре директорий пакетов самого проекта, чтобы unit-тесты
использовали пакетную область видимости тех классов, которые они тестируют.

Такая начальная структура директорий должна создаваться для всех проектов Maven, в том числе и для тех, которые формируются полностью вручную, например, из готового набора источников проектных классов.

Разрешение зависимостей

Все зависимости проектного файла можно разделить на те, которые будут разрешены через специальные публичные веб-интерфейсы к центральной БД системы Maven и на те, что будут решаться через ваш локальный репозиторий. Все то, что нельзя найти в центральной системе (например, зависимости от других проектных модулей разрабатываемой вами системы) понадобится зарегистрировать в локальном репозитории с помощью команды mvn install. Как правило, в центральном репозитории Maven вы найдете все мало-мальски интересные или важные проекты из мира Java, поэтому ручная регистраци архивных файлов jar понадобится вам в очень редких случаях.

Для всех тех случаев, когда требуемая зависимость отсутствует в центральном репозитории, необходимо включить необходимый файл библиотеки в локальный репозиторий. Для этого, прежде всего, необходимо иметь данный файл в наличии — получить его из своего проекта или скачать с ресурса разработчика. После
этого, необходимо выполнить команду регистрации данного файла библиотеки в локальном репозитории.

Приведем пример такой регистрации.

После этого, можно использовать данную зависимость в файле проекта, воспользовавшись использованной при установке в репозиторий GAV-идентификации.

Установка Maven

Чтобы установить maven в Linux, достаточно исполнить следующую команду установки.

$ sudo apt-get install maven

Под Windows установка традиционно сложнее. Понадобится найти в Интернет текущую версию продукта, скачать инсталляционный пакет, ознакомиться и выполнить правила инсталляции.

Установка плагина Maven в Eclipse

Чтобы реализовать поддержку Maven в Eclipse надо выполнить следующие шаги по установки необходимого набора плагинов.

Запустим Eclipse. В главном меню Help, выбираем подменю Install new software…

Устанавливаем поле Work with в значение — All available sites — и в поле фильтра пишем m2e. Указываем галочку напротив значения General Purpose Tools. Нажимаем кнопку Next и выполняем завершение установки.

Репозитории

Одной из отличительных черт системы Maven является работа основанная на централизации сведений об используемых артефактах. Чтобы какой-то артефакт (проект) мог
быть использован в зависимостях другого артефакта, информация о нем должна быть занесена в один из трех видов репозиториев Maven.

Различают локальные, центральный и корпоративные репозитории Maven.

Локальные репозитории создаются на компьютерах разработчиков. У каждого weразработчика, использующего Maven, в его домашней директории создается поддиректория .m2/repository которая представляет собой корневую директорию для файловой иерархии локального репозитория. Фактически, это некоторый кэш основной части центрального репозитория. В процессе работы над проектами, разработчики могут помещать в свой локальный репозиторий свои собственные артефакты для возможности
их повторного использования.

Центральный репозиторий поддерживается группой разработчиков Maven и добавление в него артефакта сопровождается согласованием ряда вопросов.

Корпоративный репозиторий организуется для групповой работы над проектом. Сервер, на котором располагается корпоративный репозиторий называют production-сервером.

Плагины

Плагины используются для изменения поведения Maven при выполнении стандартных целей и для расширения функциональности. Плагины описываются в файле проекта внутри следующей системы тегов.

Полезные плагины

Плагин указания версии компилятора Java

В данном разделе приводится пример плагина, который позволяет указать версию компилятора Java. В примере указана Java 7.

Плагин указания исполняемого класса в библиотеке

Если один из ваших проектов собирается в Java-архив, который вы предполагаете запускать с помощью команды java -jar , то такой архив, в своем файле манифеста должен иметь указание на класс со статической функцией main() используемой для запуска Java-приложений. К сожалению, это требуется
делать, даже если Java-архив состоит всего из одного класса.

Введение в Maven - простой инструмент для автоматизации сборки

Мы начнем с быстрого вступления, а затем перечислим преимущества его использования. После всего этого мы увидим процесс его установки, а затем несколько технических терминов, которые необходимы новичку. Итак, начнем!

Что такое Maven?

Apache Maven - это программное обеспечение для управления и сборки проектов. Он основан на концепции объектной модели проекта (POM). Maven может управлять сборкой проекта, составлением отчетов и документацией из центральной части информации.

Apache Maven - это инструмент для сборки, и он выполняет эту задачу точно так же, как например Ant, который тоже является выдающимся инструментом для сборки. Это программный инструмент управления проектами, который дает новую концепцию объектной модели проекта (POM).

Maven позволяет разработчику автоматизировать обработку создания исходного формата папок, выполнения сортировки и тестирования, а также упаковки и развертывания окончательной сборки. Он сокращает значительное количество шагов в базовом процессе и делает процесс сборки простым.

Apahe Maven

Зачем используется Maven?

Подводя итог, Maven упрощает и стандартизирует процесс сборки проекта. Он легко выполняет групповую совместную работу, компиляцию, распространение, документирование и отдельные задачи. Maven увеличивает возможность многократного использования, а также выполняет большинство задач, связанных со сборкой.

Он работает на многих этапах, таких как добавление jar-файлов в библиотеку проекта, создание отчетов и выполнение тестовых примеров Junits, создание файлов Jar, War, Ear для проекта и многое другое.

Очень важным аспектом Maven является назначение хранилищ для управления файлами JAR.

Давайте посмотрим на следующие преимущества Maven.

  • Его конфигурация очень минимальная
  • Имеет управляющие зависимости
  • Автоматизация всего процесса
  • Он имеет возможность запускать JUnit и другие интеграционные тесты
  • Возможность управление плагинами, тестирование и разработка
  • Стандартная и унифицированная инфраструктура среди проектов

Настройка среды Maven

Установка Maven включает в себя следующие шаги:

  • Проверьте, установлена ​​ли в системе Java. если нет то установите его
  • Проверьте, установлена ​​ли переменная среды Java. Если нет, то установите его
  • Скачайте Maven
  • Распакуйте архив maven в одной месте системы
  • Теперь добавьте папку bin из каталога apache-maven-3.6.3 в переменную среды PATH и системную переменную.
  • Откройте командную строку и выполните команду mvn -v, чтобы подтвердить установку.

Чтобы получить подробные инструкции по установке, следуйте приведенному ниже руководству на YouTube по настройке среды Maven, поскольку мы не хотим, чтобы эта статья была простой для чтения и скучной.

Данное руководство для начинающих, должно включать технические термины, связанные с MAVEN. Вот некоторые из них, которые очень важны:

Maven локальный репозиторий

Maven Local Repository - это набор, в котором Maven хранит все файлы jar проекта, библиотеки или зависимости. По умолчанию имя папки установлено на .m2, а путь находиться в Libraries\Documents\.m2.

Maven Центральный репозиторий

Центральный репозиторий Maven является местоположением по умолчанию для загрузки Maven всех библиотек зависимостей проекта для использования. Для любой библиотеки, участвующей в проекте, Maven сначала просматривает папку .m2 Локального репозитория, и если он не находит нужную библиотеку, он ищет в Центральном репозитории и загружает библиотеку в локальный репозиторий.

Maven POM

POM - это XML-файл объектной модели проекта, содержащий информацию о проекте и сведения о конфигурации, необходимые Maven для разработки проекта. Он содержит значения по умолчанию для большинства проектов. Некоторые из структур, которые могут быть определены в POM, - это зависимости проекта, плагины, которые могут быть выполнены, и, конечно, профили сборки.

Элементы, используемые в создании файла pom.xml:

  • project - Проект является корневым элементом файла pom.xml.
  • modelVersion - Означает версию модели POM, с которой вы работаете.
  • groupId - подразумевает идентификатор группы проекта. Он уникален, и чаще всего вы будете применять идентификатор группы, связанный с именем корневого пакета Java.
  • artifactId - используется для предоставления названия проекта, который вы собираете.
  • Version - этот элемент состоит из номера версии проекта. Если ваш проект был выпущен в различных версиях, тогда удобно представить версию вашего проекта.

Зависимость (Dependency)

Зависимости (Dependency) - это библиотеки, которые нужны проекту. Подобно jar-файлам Log4j, jar-файлам Apache Poi, Selenium Jars - это несколько библиотек, которые требуются для проекта. Зависимости в Maven pom.xml упоминаются так:

Плагин Surefire

Плагин Surefire необходим во время фазы тестирования жизненного цикла сборки для реализации модульных тестов приложения. Он создает отчеты в двух разных форматах, таких как обычный текстовый файл, XML-файлы, а также в HTML-файлах. Даже если вы используете инфраструктуру Junits или TestNG для создания отчетов, этот плагин необходим для использования, поскольку он помогает Maven находить тесты.

Практическое применение Maven

Когда вы работаете над конкретным проектом Java, и у этого проекта много зависимостей, сборок, требований, то работа со всеми этими вещами вручную является чрезвычайно сложной и трудоемкой. Таким образом, использование некоторых инструментов, которые могут выполнить эти работы, действительно полезно.

А Maven - это такой инструмент управления сборкой, который может выполнять все такие вещи, как добавление зависимостей, использование пути к классам для проецирования, автоматическое создание файлов war и jar и много других вещей.

Как добавить локальные файлы JAR (еще не являющиеся частью репозитория Maven) непосредственно в исходные коды моего проекта?

Привет @Praneel PIDIKITI, Можете ли вы изменить принятый ответ на тот, который набрал наибольшее количество голосов?

Установите JAR в ваш локальный репозиторий Maven следующим образом:

Где каждый относится к:

: путь к файлу для загрузки, например → c:\kaptcha-2.3.jar

: версия файла, например, → 2.3

: упаковка файла, например → jar

Ссылка

  • Maven FAQ: у меня есть банка, которую я хочу поместить в свой локальный репозиторий. Как я могу скопировать это в?
  • Maven Установка плагина Использование: The install:install-file цели

что это значит? Например, C: /Users/XXX/WorkspaceDocx/maven/src/main/resources/myJar.jar . или мы можем сделать $ /src/main/resources/myJar.jar

@opticyclic Ваш комментарий нуждается в большем количестве голосов, или этот ответ необходимо отредактировать. Это рецепт катастрофы для новичков, которые не понимают, что установка в локальный репозиторий Maven не будет включать для всех остальных.

Вы можете добавить локальные зависимости напрямую (как упоминалось в проекте build maven с включенными в него библиотеками ) следующим образом:

Обновить

Есть моменты, когда вы хотите специально протестировать, например, старую банку, и я думаю, что этот ответ хорошо подходит для этого. Это то, что мне было нужно. Проголосовал

Как бы красиво и легко это не выглядело, у этого решения есть проблема, заключающаяся в том, что yourJar.jar не будет включен в WAR-файл для вашего приложения.

Во-первых, я хотел бы отдать должное этому ответу анонимному пользователю Переполнения стека - я почти уверен, что видел подобный ответ раньше - но сейчас я не могу его найти.

Наилучшим вариантом для использования локальных файлов JAR в качестве зависимости является создание локального репозитория Maven. Такой репозиторий - не что иное, как правильная структура каталогов с файлами pom в нем.

Для моего примера: у меня есть основной проект на $ месте, и subproject1 включен $/$ .

Затем я создать репозиторий Maven в: $/local-maven-repo .

В файле pom в subproject1, расположенном по адресу $/$/pom.xml , необходимо указать хранилище, которое будет принимать путь к файлу в качестве параметра URL:

Зависимость может быть указана как для любого другого хранилища. Это делает ваш репозиторий POM независимым. Например, как только требуемый JAR будет доступен в Maven Central, вам просто нужно удалить его из локального репо, и он будет извлечен из репо по умолчанию.

Последнее, но не менее важное, это добавление файла JAR в локальный репозиторий с помощью ключа -DlocalRepositoryPath, например, так:

После установки файла JAR репозиторий Maven может быть передан в репозиторий кода, и вся установка не зависит от системы. ( Рабочий пример в GitHub ).

Я согласен с тем, что использование JAR-файлов для репо с исходным кодом не является хорошей практикой, но в реальной жизни быстрые и грязные решения иногда лучше, чем полноценное репозиторий Nexus, для размещения одного JAR, который вы не можете опубликовать.

Читайте также: