Понимание управления зависимостями в Gradle
Репозитории используются в Gradle для управления зависимостями. В зависимости от Gradle есть два компонента: зависимости и публикации проекта.
Когда вы создаете проект на Gradle, вам, вероятно, потребуются библиотеки других разработчиков. Предположим, вам нужна библиотека Apache Commons Lang для специальных операций со строками. Значит, он нужен вам в пути к классам, чтобы ваш код работал. И Apache Commons Lang могут потребоваться дополнительные библиотеки, о которых вы не знаете. Gradle позволяет вам указать конкретную зависимость, в которой нуждается ваш проект, и он перейдет в указанный репозиторий, например Maven или Ivy, и выяснит все связанные зависимости, загрузит файлы и автоматически настроит их для вас.
Gradle также имеет возможность публиковать ваши артефакты. Вы можете решить, что означает публикация для вашего конкретного случая. Вы можете опубликовать его локально или опубликовать в репозитории Maven или Ivy.
Пример репозитория Gradle
Предположим, мы хотим использовать класс StringUtils из библиотеки Apache Commons Lang. Давайте настроим директора вот так:
Привет мир| - построить.Gradle
'- src
| - главная
'-- Ява
'-- Привет мир
'-- Привет мир.Ява
В helloworld.java, вы можете поместить следующий код:
организация импорта.апач.общественное достояние.lang3.StringUtils;public class helloworld
public static void main (String [] args)
String greetings = "Привет, мир!!";
Система.вне.println (привет);
Система.вне.println (StringUtils.swapCase (привет));
И в сборке.gradle файл вы можете поместить следующее:
применить плагин: 'java'версия = '1.0 '
репозитории
mavenCentral ()
dependencies
собрать группу: 'org.апач.commons ', имя:' commons-lang3 ', версия:' 3.7 '
банка
из конфигураций.компилировать.собери zipTree it
Давайте обсудим, что происходит в приведенном выше скрипте сборки. Он сообщает Gradle поискать в репозитории Maven версию 3 commons-lang3.7. Он также сообщает Gradle упаковать зависимости в файл jar. Если вы удалите из конфигураций.компилировать.collect zipTree it строка, тогда вам нужно будет включить внешние зависимости в путь к классам при запуске программы.
Теперь из корневой папки можно запустить сборку командой
$ gradle jarВы должны увидеть такие результаты:
$ gradle jar
Скачать https: // репо.знаток.апач.org / maven2 / org / apache / commons / commons-lang3 / 3.7 /
commons-lang3-3.7.пом
Скачать https: // репо.знаток.апач.org / maven2 / org / apache / commons / commons-parent / 42 /
Обще-родитель-42.пом
Скачать https: // репо.знаток.апач.org / maven2 / org / apache / commons / commons-lang3 / 3.7 /
commons-lang3-3.7.банка
СТРОИТЬ УСПЕШНО за 6 секунд
2 действенные задачи: 1 выполнена, 1 актуальна
Вы можете запустить сборку так:
$ java -cp build / libs / helloworld-1.0.банка helloworldПривет мир!
Привет мир!
Если бы вы не включили зависимости в свою сборку, классы StringUtils не были бы включены в ваш helloworld-1.0.файл jar. И вы получили бы такую ошибку:
$ java -cp build / libs / helloworld-1.0.банка helloworldПривет мир!
Исключение в потоке "main" java.язык.NoClassDefFoundError: org / apache / commons / lang3 /
StringUtils в helloworld.основной (helloworld.java: 11)
Вызвано: java.язык.ClassNotFoundException: org.апач.общественное достояние.lang3.StringUtils
в Java.сеть.URLClassLoader.findClass (URLClassLoader.java: 381)
в Java.язык.ClassLoader.loadClass (ClassLoader.java: 424)
на солнце.разное.Пусковая установка $ AppClassLoader.loadClass (Launcher.java: 331)
в Java.язык.ClassLoader.loadClass (ClassLoader.java: 357)
… 1 больше
Gradle упрощает упаковку зависимостей в пакет.
Заключение
Использование репозиториев Gradle и функций зависимостей может упростить процесс управления зависимостями. Вам не нужно вручную все отслеживать.
Дальнейшее изучение:
Управление зависимостями Gradle для проектов Java