Зарегистрируйтесь для доступа к 15+ бесплатным курсам по программированию с тренажером

Зависимости Java: Настройка окружения

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

Откуда вообще берутся такие библиотеки? Иногда их делают обычные программисты, такие же как и мы с вами. Иногда за библиотеками стоят компании, как большие так и маленькие. Исходный код этих библиотек почти всегда хранится на github.com и доступен для изучения.

Возьмем для примера библиотеку Apache Commons Lang. Она содержит множество полезных функций на все случаи жизни начиная от генерации случайных чисел, до обработки строк. Исходный код этой библиотеки доступен здесь. Посмотрите файл с методами для строк. Он содержит более 9 тысяч строчек кода. Правда половина из них комментарии, но все равно внушительно.

Предположим, что мы решили воспользоваться методом capitalize() для того, чтобы капитализировать строку – привести первый символ строки к верхнему регистру. Выглядит он так:

import org.apache.commons.lang3.StringUtils;

var capitalizedWord = StringUtils.capitalize("hexlet");
System.out.println(capitalizedWord); // => Hexlet

Как добавить этот метод к себе в проект? Чтобы разобраться с этим вопросом, надо знать как вообще распространяются библиотеки в Java. Существует специальное хранилище Maven Central (иногда говорят, что это каталог), куда любой разработчик, может выложить свою библиотеку. Здесь можно найти практически все публичные библиотеки для Java. Сам сайт, правда, выглядит страшновато, но им и не придется много пользоваться.

Maven Central популярный, но не единственный источник пакетов. Есть и другие. В компаниях часто используются свои каталоги

У каждого проекта в каталоге есть своя страница. Здесь можно увидеть доступные версии, популярность, наличие критичных ошибок и тому подобное. Сами библиотеки распространяются в виде JAR-файлов, которые можно скачать прямо с сайта.

Попробуем скачать и подключить JAR библиотеки Apache Commons Lang к нашему коду. По порядку:

  1. На странице библиотеки нажимаем на последнюю доступную версию и попадаем на страницу конкретной версии
  2. На этой странице находим поле Files и нажимаем на ссылку jar. Браузер предложит скачать файл.
  3. Скачиваем этот файл и кладем рядом с кодом в проект

Создадим класс, в котором капитализируем строку и выведем ее на экран:

package io.hexlet;

import org.apache.commons.lang3.StringUtils;

public class Example {
    public static void main(String[] args) {
        var capitalizedWord = StringUtils.capitalize("hexlet");
        System.out.println(capitalizedWord);
    }
}

После этого директория с кодом будет выглядеть так:

tree .
.
├── Example.java
└── commons-lang3-3.12.0.jar

Осталось запустить код. Для этого нужно указать компилятору где искать классы пакета org.apache.commons.lang3. Технически классы располагаются внутри файла commons-lang3-3.12.0.jar. И мы можем напрямую указать этот файл через classpath:

# cp это classpath
java -cp commons-lang3-3.12.0.jar Example.java
Hexlet

Именование пакетов

В Maven Central есть определенные правила по именованию пакетов, которые стали стандартом де-факто во всей индустрии. Эти же правила применяются и при разработке локальных проектов. Даже редакторы требуют такой структуры. Речь идет про GroupId и ArtifactId.

GroupId – уникальный идентификатор, используемый для всех проектов компании. Даже если у вас нет компании, его все равно надо задавать. По задумке GroupId это домен, который вы контролируете, например, org.apache или io.hexlet (в нашем случае). Если у вас нет такого домена, но вы хотите что-то поделать локально, то задайте в редакторе любой домен, какой вам нравится.

ArtifactId – Имя jar-файла без указания версии. В примере выше это commons-lang3. Обычно ArtifactId cовпадает с именем проекта.

Полный путь к пакету проекта строится как GroupId.ArtifactId. Для библиотеки Apache Commons Lang это org.apache.commons-lang3.

Итого

Подводя итог, мы видим, что библиотеки распространяются в виде пакетов, упакованных в JAR-файлы. Одна библиотека – один JAR. JAR-файлы подключаются к проекту через добавление в classpath.


Самостоятельная работа

  1. Добавьте в проект библиотеку Apache Commons Lang
  2. Изучите методы строк, которые предоставляет класс StringUtils библиотеки Apache Commons Lang
  3. В классе One измените код метода main() так, чтобы на экран выводилось слово "Hexlet" в обратном порядке. Для этого используйте метод reverse
  4. Запустите программу на выполнение и убедитесь, что на экран вывелось слово в обратном порядке

Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты

Об обучении на Хекслете

Для полного доступа к курсу нужен базовый план

Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
1000
упражнений
2000+
часов теории
3200
тестов

Открыть доступ

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

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff
Рекомендуемые программы
профессия
от 6 300 ₽ в месяц
Разработка приложений на языке Java
10 месяцев
с нуля
Старт 4 апреля

Используйте Хекслет по-максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»