Программисты не пишут весь код с нуля. Большая его часть приходит с библиотеками и фреймворками, которые подключатся к проекту как зависимости. Так говорят потому что код проекта теперь зависит от этих библиотек. Откуда берутся эти зависимости и как их подключать, на эти вопросы мы ответим в этом уроке.
Откуда вообще берутся такие библиотеки? Иногда их делают обычные программисты, такие же как и мы с вами. Иногда за библиотеками стоят компании, как большие так и маленькие. Исходный код этих библиотек почти всегда хранится на 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 к нашему коду. По порядку:
- На странице библиотеки нажимаем на последнюю доступную версию и попадаем на страницу конкретной версии
- На этой странице находим поле Files и нажимаем на ссылку jar. Браузер предложит скачать файл.
- Скачиваем этот файл и кладем рядом с кодом в проект
Создадим класс, в котором капитализируем строку и выведем ее на экран:
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.14.0.jar
Осталось запустить код. Для этого нужно указать компилятору где искать классы пакета org.apache.commons.lang3. Технически классы располагаются внутри файла commons-lang3-3.14.0.jar. И мы можем напрямую указать этот файл через classpath:
# cp это classpath
java -cp commons-lang3-3.14.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.
Самостоятельная работа
- Добавьте в проект библиотеку Apache Commons Lang
- Изучите методы строк, которые предоставляет класс
StringUtils
библиотеки Apache Commons Lang - В классе
One
измените код методаmain()
так, чтобы на экран выводилось слово "Hexlet" в обратном порядке. Для этого используйте метод reverse - Запустите программу на выполнение и убедитесь, что на экран вывелось слово в обратном порядке
Остались вопросы? Задайте их в разделе «Обсуждение»
Вам ответят команда поддержки Хекслета или другие студенты
Для полного доступа к курсу нужен базовый план
Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.