JavaRush /Курсы /JSP & Servlets /Зависимости в Maven-проекте

Зависимости в Maven-проекте

JSP & Servlets
1 уровень , 3 лекция
Открыта

4.1 dependency

Теперь давай разберем еще одну вещь, которая сделала maven таким популярным – управление зависимостями.

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

Давай добавим в наш проект последнюю версию Spring и Hibernate. Вот как это будет выглядеть:

<dependencies>
 
  <dependency>
 <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>5.3.18</version> 
  </dependency>

  <dependency>
 <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>6.0.0.Final</version>
  </dependency>

</dependencies>

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

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

4.2 Как искать библиотеки в Maven Repository

Кстати, я добавил XML-код этих двух библиотек в мой pom.xml меньше чем за минуту. Неплохо, да? Сейчас я научу тебя быстро добавлять в проект любую библиотеку.

Во-первых, в интернете есть центральный публичный Maven-репозиторий, в котором хранятся миллионы библиотек. Находится он по ссылке https://mvnrepository.com/, нужную тебе библиотеку можно искать непосредственно в нем.

Maven

Во-вторых, можно еще проще – сразу пиши в Google “maven hibernate”, переходи по первой ссылке и получишь:

Maven 2

Выбери нужную версию и кликай по ней. Иногда последняя версия содержит суффикс Beta, тогда бери что-нибудь постарее.

Я выбрал версию 6.0.0.Final и перешел на последнюю страницу.

Зеленым квадратом тут выделен код, который тебе нужно скопировать в свой pom.xml. Все.

4.3 dependency repository

Во время сборки проекта твой Maven сначала будет искать указанную библиотеку (артефакт) в твоем локальном репозитории. Если он там ее не найдет, то затем будет искать в глобальном Maven-репозитории. И потом загрузит ее в твой локальный репозиторий – для ускорения следующей сборки.

Но, кроме этих двух репозиториев существуют еще и другие.

Во-первых, у многих крупных компаний есть maven-репозитории со своими собственными библиотеками.

Во-вторых, до изобретения Docker, многие проекты после сборки просто клались в корпоративный Maven-репозиторий. А что? Отличное место для хранения всего. И версионирование опять-таки поддерживается.

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

<repositories>
 
  <repository>
 <id>public-javarush-repo</id> <name>Public JavaRush Repository</name> <url>http://maven.javarush.com</url>
  </repository>
 
  <repository>
 <id>private-javarush-repo</id> <name>Private JavaRush Repository</name> <url>http://maven2.javarush.com</url>
  </repository>
 
</repositories>

У каждого репозитория есть 3 вещи: Key/ID, Имя и URL. Имя можно указать любое – оно для твоего удобства, ID тоже для ваших внутренних нужд, фактически тебе нужно указать только URL.

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

Создатели Maven умеют в стандартизацию, в этом им не откажешь.

Комментарии (25)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Alex Уровень 51
2 апреля 2025
Если у кого-то выход в интернет через прокси-сервер, например корпоративный, и появляется ошибка вида: "status code: 407, reason phrase: Proxy Authentication Required ( The ISA Server requires authorization to fulfill the request. Access to the Web Proxy filter is denied. ) (407)". Нужно указать правильные параметры прокси в файле "C:\Users\<USERNAME>\.m2\settings.xml"

<proxies>
    <!-- proxy
     | Specification for one proxy, to be used in connecting to the network.
     |
	      -->
    <proxy>
      <id>optional</id>
      <active>true</active>
      <protocol>https</protocol>
      <username>USERNAME</username>
      <password>PASSWORD</password>
      <host>HOSTNAME</host>
      <port>8080</port>
      <nonProxyHosts>local.net</nonProxyHosts>
    </proxy>

  </proxies>
USERNAME, PASSWORD, HOSTNAME и номер порта естественно свои.
Евгений Уровень 106 Expert
31 марта 2024
Я не понял а зависимости java.rush где брать? Их на maven нет?
Иван Корниенко Уровень 109
30 апреля 2024
Это просто для примера, вымышленные зависимости 🙂
Anonymous #3268884 Уровень 24
9 августа 2023
я вот не понял если я добавлю в тег <dependency> </dependency> нужную мне библиотеку, ну допустим Jsoup, то что будет дальше? Проект будет обращаться к этой библиотеке в режиме онлайн, а сама она будет лежать в глобальном репозитории? Или библиотека сама скачается на мой комп? Или мне нужно самому ее вручную скачать и положить в свой локальный репозиторий?
PHANTOM Уровень 42 Expert
16 августа 2023
Будут скачиваться из удаленных репозиториев и храниться в локальном репозитории Maven на твоем компуктере. Windows: C:\Users\<Username>\.m2\repository Linux/Unix: /home/<Username>/.m2/repository macOS: /Users/<Username>/.m2/repository
Fantasy Уровень 20
5 января 2023
"Важный момент: если зальешь проект на GitHub или вышлешь кому-то в виде архива, этот человек гарантированно сможет его собрать" - хм, кажется создатель статьи давно так не ошибался)
The Body of the Atr Уровень 3
22 сентября 2022
если у у кого то, как у меня, после вставки зависимостей они подсветились красным и выползает ошибка: Maven dependency not found нужно правой кликнуть по проекту, выбрать maven - reload project
Денис Уровень 19
20 марта 2023
Пусть у тебя будет всё хорошо! )
Anonymous #3322801 Уровень 2 Expert
9 июля 2023
🙏
Мария Шамаева Уровень 2
23 ноября 2023
крепкого здоровья
Алексей Уровень 55
16 января 2024
Долгих лет жизни тебе, мил человек
Anonymous #3163965 Уровень 2
13 сентября 2022
Кто пишет такие безграмотные тексты? уровень повествования как у школьника 3 класса. Умеют в стандартизацию.. Просто не возможно читать
Alexander Уровень 81 Expert
4 ноября 2022
Как душно...🙃 Это сленг, привыкай😉
3 января 2023
фу, что за заимствованные слова "сленг". Ты что не умеешь излагать свои мысли на русском языке?
Andrey Zinovich Уровень 30
11 января 2023
Полностью согласен. Это не сленг - это тиражируемая безграмотность.
matimuu #3370767 Уровень 30
31 января 2024
вхахаха, ну вы и рофлите, 2к24й а вы в лаптях ходите, программирование про постоянное развитие и адаптацию, не забывайте ;)
Anonymous #3268884 Уровень 24
24 марта 2024
Гой еси, друже! Что за нерусское слово "тиражируемая"? Не "тиражируемая", а "зело распространяемая" ! Да и вовсе негоже программисту славянскому изучать джаву богомерзкую. Айда программировать ЭВМ Эльбрус на языке Алгол-68, яко завещали пращуры
Serhii Уровень 51
4 июля 2022
</dependency> <dependencies>, а должно быть так </dependencies> ?
Андрей Пазюк Уровень 122 Expert
6 июля 2022
Serhii, нет, это разные теги. Тег <dependencies></dependencies> содержит список зависимостей. А тег <dependency></dependency> содержит информацию лишь об одной зависимости. Вот же пример был с самого начала:

<dependencies>
 
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
	<version>5.3.18</version> 
  </dependency>

  <dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-core</artifactId>
    <version>6.0.0.Final</version>
  </dependency>

</dependencies>
Serhii Уровень 51
6 июля 2022
Я не о том спрашивал. В примере не хватает слеша в закрывающем теге.
Buenos Уровень 49
14 июля 2022
Так и есть, косяк в примере, тоже сообразил, слава богу, с подсказками Идеи
17 июля 2022
Привет, Оливер! 🖐
Андрей Пазюк Уровень 122 Expert
17 июля 2022
Виталий, какая встреча))
Монкє Уровень 38
12 июня 2022
ого я тут первый :)
Алексей С Уровень 33
29 июня 2022
а я второй. Полезные курсы.