Гайд по созданию клиента для Skyscanner API и его публикации в jCenver и Maven Central [Часть 1]![Гайд по созданию клиента для Skyscanner API и его публикации в jCenter и Maven Central [Часть 2] - 1]()
Заполняем обязательно Name, Type и опционально Default Licenses и Description.
В поле Type выбираем именно Maven, так как он нам нужен:
Далее, создаем новый пакет (Add New Package). Заполняем поля:
И нажимаем Create Package.
![Гайд по созданию клиента для Skyscanner API и его публикации в jCenter и Maven Central [Часть 2] - 5]()
Так будет выглядеть Jira тикет:
Созданный Jira Issue будет обрабатываться человеком в течение 2-3 рабочих дней. Если все пройдет успешно, вам ответят, что groupId - com.github.romankh3 подготовлен:
Теперь привяжем Sonatype аккаунт, который мы создали к bintray. Для этого заходим в секцию Edit profile в bintray:
Двигаемся дальше!
Итоговый build.gradle будет выглядеть так.
После пишем в терминале или запускаем через IDEA gradlew bintrayUpload и всё, готово! Результат будет лежать на bintray аккаунте как показано ниже:
Это значит, что мы успешно опубликовали клиент, но он еще не находится ни в Maven Central ни в jCentral.
Чтобы добавить клиент в jCenter, нужно нажать Add to jCenter, затем ввести groupId, под которым будет проект, как указано ниже:
Теперь ждем, пока обработается запрос. после этого можно будет синхронизировать клиент с jCenter.
В течение суток пришел ответ, что запрос на добавление клиента подтвержден:
Теперь остался последний шаг: добавить клиент в Maven Central. Для этого нужно найти в пакете клиента опцию Maven Central:
Мы же уже привязали Sonatype аккаунт, поэтому остается нажать только Sync, как показано ниже:
И вот такой желанный ответ будет, как только Sonatype разрешит опубликовать в Maven Central:
Причем из этой картинки можем сделать вывод, что валидация прошла успешно и клиент был опубликован успешно на Maven Central.
На этом процесс публикации в jCenter и Maven Central закончен успешно!
Кому показалось, что сделать это просто — вы невероятные люди и удивить вас сложно :)
Содержание:
- Часть 2: публикация клиента в JCenter и Maven Central
- Часть 3. Применение клиента для flights-monitoring
- Часть 4: Итог
- Полезные ссылки
![Гайд по созданию клиента для Skyscanner API и его публикации в jCenter и Maven Central [Часть 2] - 1](https://cdn.javarush.com/images/article/2939efe1-d9b8-4a15-8765-a62d029421f9/original.jpeg)
Часть 2: публикация клиента в JCenter и Maven Central
Теперь пошагово сделаем следующее:- Создадим Sonatype аккаунт и зарегистрируем groupId через Jira issue;
- Создадим bintray аккаунт и пакет для клиента;
- Подготовим build.gradle для публикации на bintray, опубликуем.
Шаг 1: создаем bintray аккаунт и пакет для клиента
Что такое bintray и зачем он нам? bintray — это система хранения библиотек, которая выступает посредником между JCenter, Maven Central и другими хранилищами. Чтобы создать аккаунт, переходим по этой ссылке и создаем open-source аккаунт. Далее создаем репозиторий, в котором будут храниться проекты, как показано ниже:![Гайд по созданию клиента для Skyscanner API и его публикации в jCenter и Maven Central [Часть 2] - 2](https://cdn.javarush.com/images/article/bc69b8b7-633c-4b87-bae0-a20b02efa569/original.jpeg)
![Гайд по созданию клиента для Skyscanner API и его публикации в jCenter и Maven Central [Часть 2] - 3](https://cdn.javarush.com/images/article/747c29b0-adf1-4044-9626-94d3efcf9aab/original.jpeg)
- Name — обязательное поле. В нем я обычно ставлю такое же имя, как на GitHub;
- Description — поле не обязательное, но лучше заполнить, чтобы если кто-то захочет использовать ваше решение, он хотя бы знал, что это такое;
- License — здесь уже обязательно выбрать лицензию. Это вообще непростой вопрос, и нужно хорошо все обдумать. Обычно я выбираю лицензию от Apache 2;
- Tags — то же, что и Description: можно добавлять, можно не добавлять. Здесь это просто теги, по которым можно найти проект;
- Maturity — здесь стоит указать, на каком этапе находится проект. Так как у меня версия только 0.1, ставлю в Development;
- Website — здесь указываем ссылку на Github проекта;
- Issue tracker — ссылка на секцию Issues в GitHub”
- Version control — здесь таже ссылка на проект + в конце добавляем “.git”: https://github.com/romankh3/skyscanner-flight-api-client.git.
![Гайд по созданию клиента для Skyscanner API и его публикации в jCenter и Maven Central [Часть 2] - 4](https://cdn.javarush.com/images/article/ff5d1626-503f-439f-8f8a-ff25b263ecea/original.jpeg)
Шаг 2: Создание Sonatype аккаунта и регистрация groupId через jira issue
Создаем аккаунт в Sonatype и после создания нажимаем на Create нового Jira тикета. Здесь указываем ссылку на проект, на .git также, как и в bintray.![Гайд по созданию клиента для Skyscanner API и его публикации в jCenter и Maven Central [Часть 2] - 5](https://cdn.javarush.com/images/article/010ccc8c-c186-4bc1-8d0b-da2adb327e30/original.jpeg)
![Гайд по созданию клиента для Skyscanner API и его публикации в jCenter и Maven Central [Часть 2] - 6](https://cdn.javarush.com/images/article/57f3fe6e-8a56-4671-8322-131825a33979/original.jpeg)
![Гайд по созданию клиента для Skyscanner API и его публикации в jCenter и Maven Central [Часть 2] - 7](https://cdn.javarush.com/images/article/7dc17f23-ce9b-442d-9db9-7d84a20a41ac/original.jpeg)
![Гайд по созданию клиента для Skyscanner API и его публикации в jCenter и Maven Central [Часть 2] - 8](https://cdn.javarush.com/images/article/cdae497a-754a-4c7b-86cf-0b0646a72afa/original.jpeg)
![Гайд по созданию клиента для Skyscanner API и его публикации в jCenter и Maven Central [Часть 2] - 9](https://cdn.javarush.com/images/article/76834959-27b6-401d-bd35-a65fad1eccfe/original.jpeg)
Шаг 3: Подготовка build.gradle для публикации на bintray
Для публикации на bintray есть плагин, при помощи которого можно относительно удобно и быстро опубликовать код. Нужно добавить новый в секцию плагинов:
plugins {
id "com.jfrog.bintray" version "1.8.4"
}
Для публикации нужен не только сам клиент, но еще и исходный код и джавадоки. Добавляем в скрипт след методы:
task javadocJar(type: Jar) {
classifier = 'javadoc'
from javadoc
}
task sourcesJar(type: Jar) {
classifier = 'sources'
from sourceSets.main.allSource
}
artifacts {
archives javadocJar, sourcesJar
}
Ниже есть вся необходимая информация для публикации в Maven Central: имя, описание, ссылка, кто разработчик, лицензия. Без этого Maven Central не пустит к себе проект.
configure(install.repositories.mavenInstaller) {
pom.project {
inceptionYear '2019'
name project.name
packaging 'jar'
description project.description
url 'https://github.com/romankh3/skyscanner-flight-api-client'
scm {
connection 'scm:git:https://github.com/romankh3/skyscanner-flight-api-client'
developerConnection 'scm:git:git@github.com:romankh3/skyscanner-flight-api-client.git'
url 'https://github.com/romankh3/skyscanner-flight-api-client'
}
licenses {
license {
name 'The Apache Software License, Version 2.0'
url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
}
}
developers {
developer {
id 'romankh3'
name 'Roman Beskrovnyi'
email 'roman.beskrovnyy@gmail.com'
}
}
}
}
И информация, которая необходима для публикации в jCenter — та, которая нужна для bintray:
bintray {
user = getProjectProperty "bintrayUserName"
key = getProjectProperty "bintrayApiKey"
configurations = ['archives']
publish = true
pkg {
repo = 'maven'
name = 'skyscanner-flight-api-client'
licenses = ['Apache-2.0']
labels = ['java', 'api-client ', ' skyscanner ', 'library ']
publicDownloadNumbers = true
//noinspection GroovyAssignabilityCheck
version {
name = project.version
vcsTag = project.version
gpg {
sign = true
}
mavenCentralSync {
sync = true
user = getProjectProperty 'ossrhUsername'
password = getProjectProperty 'ossrhPassword'
close = '1' // '0' to NOT close
}
}
}
}
bintray plugin добавляет gradle task для публикации — bintrayUpload, но чтобы это заработало, нужно еще указать пользователя bintray и sonatype.
Для этого я создал пустой файл gradle.properties, в который в момент публикации передаются значения:
bintrayUserName=bintray-name
bintrayApiKey=bintray-api-key
ossrhUsername=sonatypeAccountName
ossrhPassword=sonatypeAccountPassword
где bintray-api-key можно найти, как показано ниже на картинке:
![Гайд по созданию клиента для Skyscanner API и его публикации в jCenter и Maven Central [Часть 2] - 10](https://cdn.javarush.com/images/article/bc137097-0ead-456f-90a7-5df1f061a720/original.jpeg)
![Гайд по созданию клиента для Skyscanner API и его публикации в jCenter и Maven Central [Часть 2] - 11](https://cdn.javarush.com/images/article/0ac3dec5-901c-4986-b861-80809a03cbca/original.jpeg)
![Гайд по созданию клиента для Skyscanner API и его публикации в jCenter и Maven Central [Часть 2] - 12](https://cdn.javarush.com/images/article/863861d3-244a-41fa-ab87-e1649511c0ac/original.jpeg)
![Гайд по созданию клиента для Skyscanner API и его публикации в jCenter и Maven Central [Часть 2] - 13](https://cdn.javarush.com/images/article/30c70c1a-ee23-4c65-ae6d-beb133675ce8/original.jpeg)
![Гайд по созданию клиента для Skyscanner API и его публикации в jCenter и Maven Central [Часть 2] - 14](https://cdn.javarush.com/images/article/dac44cc1-44d4-4a1d-8031-dc7654d284a9/original.jpeg)
![Гайд по созданию клиента для Skyscanner API и его публикации в jCenter и Maven Central [Часть 2] - 15](https://cdn.javarush.com/images/article/51ab5e50-b74a-43f5-a4d2-7bc3761b0648/original.jpeg)
![Гайд по созданию клиента для Skyscanner API и его публикации в jCenter и Maven Central [Часть 2] - 16](https://cdn.javarush.com/images/article/ccfb42df-f45c-41ac-b4d7-ecb097183ad4/original.jpeg)
Часть 3. Применение клиента для flights-monitoring
Просто так написать что-то, лишь бы лежало — несерьёзно. Код должен работать, поэтому сразу после публикации в последней части подключаю клиент для проекта, которому он нужен — для flight-monitoring. Для этого:добавляю еще одну зависимость в pom.xml:
<dependency> <groupId>com.github.romankh3</groupId> <artifactId>skyscanner-flight-api-client</artifactId> <version>0.1.8</version> </dependency>
удаляю пакет client из проекта;
переиспользую импорты на ссылки на клиента и вместо FlightPriceDto использую BrowseFlightPricesResponseDto;
и всё :)
Часть 4: Итог
- Написан клиент для Skyscanner API в виде отдельного проекта.
- Проделан тернистый путь публикации клиента в Maven Central и jCenter через bintray.
- Успешно использован клиент для нужд проекта — flights-monitoring.
- Эта статья может быть использована как пошаговое руководство для тех, кто хочет стать на путь open-source.
Полезные ссылки:
- Создание системы мониторинга цен на авиабилеты: пошаговое руководство.
- Enjoy Bintray and use it as pain-free gateway to Maven Central
- Публикация Android библиотеки в jCenter
- Gradle: управляя зависимостями
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ