14 мая 2020

Как создать личный Maven-репозиторий на Github

.

  В рамках освоения мной языка Java на определённом этапе встал вопрос: «Как стать богатым и знаменитым, написав пару строчек кода выложить своё будущее творение на суд других людей, то бишь, создать полезную и необходимую библиотеку?». До сих пор приходилось лишь пользоваться чужими библиотеками, но ведь будущее не за горами. А ещё, пришло понимание, что практически любой проект сейчас использует некий инструмент для сборки (например, Maven), который сам подтягивает зависимости и старые пути (выкладывание jar-файла) уже неактуальны. Я быстренько нашёл в сети руководство, но меня ждал облом. За пару лет с его публикации плагины устарели или обновились, меня встретили ошибки и долгий поиск решений. Поэтому было принято решение сделать новую версию и по возможности прокомментировать её и сравнить с прошлым вариантом. Итак, поехали…

.

Шаг 1. Создание пустого Maven-проекта

Я подразумеваю здесь, что Name – всего лишь имя проекта в среде, а вот GroupID и ArtifactID это имена, используемые для идентификации проекта в будущем. Чаще всего GroupID делают на манер адреса сайта наоборот, так же обычно называют пакет. ArtifactID – имя проекта внутри пакета. Обычно оно совпадает с именем проекта в среде.

Создадим пакет, где и будет лежать библиотека.

Пакет будет носить имя GroupID и иметь его структуру

Создадим внутри пакета класс, которым мы собственно и хотим поделиться с миром.

Наш класс будет иметь один максимально простой метод. Ведь это просто демонстрация.

.

Шаг2. Загрузим проект на GitHub

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

IDEA спросит у вас, как назовём новый репозиторий и выложит туда проект.

Среда даже предложила мне сделать первый коммит.

.

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

.

Шаг 3. Заполняем правильно файлы с конфигурацией.

Просто пошагово повторять за скриншотами бывает очень полезно, но иногда нужно и объяснять подробно, что мы делаем. Так что постараюсь объяснить этот шаг по максимуму, насколько сам его понял. Мы создали на гитхабе главный репозиторий, но структура репозитория мавен подразумевает немного другие требования. Поэтому мы будем создавать на гитхабе отдельную ветку (branch) со всеми требуемыми файлами и настройками, необходимыми, чтобы подключить нашу библиотеку посредством Maven. Делать мы это будем опять же с помощью Maven, а точнее плагина site-maven-plugin.

Сперва правим наш pom.xml

Первые строки должны были сформироваться сами. Не меняем их:

<?xml version=»1.0″ encoding=»UTF-8″?>
<project xmlns=»http://maven.apache.org/POM/4.0.0″
xmlns:xsi=»http://www.w3.org/2001/XMLSchema-instance»
xsi:schemaLocation=»http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd»>
<modelVersion>4.0.0</modelVersion>


<groupId>com.myproject.newlib</groupId>
<artifactId>HelloLib</artifactId>
<version>1.0-SNAPSHOT</version>

.

Добавим блок свойств, где укажем версию Java (я делал в 11й), сервер гитхаба и версию плагина, позволяющего Maven взаимодействовать с гитхабом. Кроме того, из-за постоянных предупреждений о кодировке я добавил строчку с указанием UTF-8. Подозреваю, что проблемы с кодировкой возникли из-за системы (Windows), возможно приверженцам других систем эта строчка не пригодится.

<properties>
<java.version>11</java.version>
<github.global.server>github</github.global.server>
<github.maven-plugin>0.12</github.maven-plugin>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

.

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

<distributionManagement>
<repository>
<id>internal.repo</id>
<name>Temporary Staging Repository</name>
<url>file://${project.build.directory}/mvn-repo</url>
</repository>
</distributionManagement>

.

Остался один большой блок build, который содержит в нашем случае подблок plugins. Настройку плагинов разберём отдельно. Верхние две строки открывают блоки, позже мы их закроем. Ниже указываются параметры плагина, его ArtifactID, версия и настройки. Если вы читаете это в будущем и что-то из этих строчек светит красным, то возможно нужной версии уже не существует. В любом случае, мавен (или Idea) подтягивает подсказки, когда вы редактируете файл. Неверные настройки первого же плагина (не указал версию) долго мешали мне скомпилировать код верно. Да, судя по названию, для этого и служит первый плагин.

<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>11</source>
<target>11</target>
</configuration>
</plugin>

.

Следующий плагин регулирует размещение нашего проекта (в данном случае на гитхабе). Я беззастенчиво вычеркнул отсюда настройки, где указывался альтернативный репозиторий для размещения проекта. Возможно настройки устарели, а может это ещё одна windows-only проблема, однако удаление строк

<configuration>
<altDeploymentRepository>internal.repo::default::file://${project.build.directory}/mvn-repo</altDeploymentRepository>
</configuration>

.

никак не повлияло на работоспособность проекта, зато избавило от ошибок

<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>3.0.0-M1</version>
</plugin>

.

И вот настал черёд главного плагина site-maven-plugin. Именно он позволяет размещать на гитхабе наш maven-репозиторий. Не знаю, все ли настройки здесь так уж необходимы, это поле для ваших экспериментов, но как минимум название ветки (branch) и папка для размещения (outputDirectory) должны присутствовать Также крайне необходимо указать имя репозитория и его владельца в строках repositoryName и repositoryOwner соответственно. Здесь нужно указывать свои данные. Вот где их можно подсмотреть:

.

Оставшиеся строки также рекомендую оставить без изменений.

        <plugin>
<groupId>com.github.github</groupId>
<artifactId>site-maven-plugin</artifactId>
<version>0.12</version>
<configuration>
<message>Maven artifacts for ${project.version}</message>
<noJekyll>true</noJekyll>
<outputDirectory>${project.build.directory}/mvn-repo</outputDirectory>
<branch>refs/heads/mvn-repo</branch>
<includes><include>**/*</include></includes>
<repositoryName>MyLib</repositoryName>
<repositoryOwner>Folko85</repositoryOwner>
</configuration>
<executions>
<execution>
<goals>
<goal>site</goal>
</goals>
<phase>deploy</phase>
</execution>
</executions>
</plugin>
</plugins>
</build>

.

Вот и всё. Последние две строки закрывают блоки кода. Теперь нам предстоит настроить ещё один файл settings.xml

Этот файл легко найти в папке.m2, находящейся в домашнем каталоге. Ещё проще можно найти его перейдя по ссылке из Idea:

.

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

<?xml version=»1.0″ encoding=»UTF-8″?>
<settings xmlns=»http://maven.apache.org/SETTINGS/1.0.0″
xmlns:xsi=»http://www.w3.org/2001/XMLSchema-instance»
xsi:schemaLocation=»http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd»>
<servers>
<server>
<id>github</id>
<username>YourLogin</username>
<password>YourPassword</password>
</server>
</servers>
</settings>

.

Шаг 4. Сборка и отправка нашей библиотеки на GitHub

Просто перейдите на вкладку Maven(В Idea она справа, обозначена стрелочкой), выполните последовательно стадии Clean и Deploy.

Этого должно быть достаточно для отправки библиотеки на гитхаб в отдельную ветку. Признаком успешного завершения должно стать сообщение BUILD SUCCESS (обведено кружком)

.

В итоге на гитхабе появится ветка mvn-repo, содержащая необходимую структуру файлов, которую в любой Maven-проект можно добавить в качестве библиотеки.

.

Шаг 5. Как же подключить эту библиотеку в проект.

Добавлю ещё каплю теории. По умолчанию Maven подтягивает библиотеки, которые вы указали в зависимостях (dependencies) из своего репозиториев на своём портале https://mvnrepository.com/ .Но всяким маленьким и учебным библиотекам там вроде бы не место, поэтому и появилось это руководство. Чтобы подключить нашу вновь созданную библиотеку с гитхаба нужно добавить в pom.xml свой репозиторий.

.

<repositories>
<repository>
<id>[name-project]-mvn-repo</id>
<url>https://raw.github.com/[username]/[name-project]/mvn-repo/</url>
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
</snapshots>
</repository>
</repositories>

.

Где брать имя проекта и имя пользователя, вы уже знаете, но ещё раз напомню:

.

Сама библиотека добавляется примерно так. Подставляете свои groupID и ArtifactID и радуетесь жизни. Имейте в виду, что Idea может выделить поначалу красным ваш код, так что нужно выполнить Maven -> Reimport перед использованием.

.

<dependency>
<groupId> com.myproject.newlib </groupId>
<artifactId>HelloLib </artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>

.

P.S. Возможно через пару лет кто-то встретит кучу ошибок, пытаясь повторить это на новой версии IDEA с новыми версиями Maven-плагинов. Так что пытайтесь вникнуть в суть, а не просто слепо повторить. Задавайте вопросы и получите ответы.


Метки: , ,

Опубликовано 14.05.2020 folko85 в категории "Блог

Добавить комментарий