Гайд по созданию клиента для Skyscanner API и его публикации в jCenver и Maven Central [Часть 1]
Содержание:
- Часть 2: публикация клиента в JCenter и Maven Central
- Часть 3. Применение клиента для flights-monitoring
- Часть 4: Итог
- Полезные ссылки
Часть 2: публикация клиента в JCenter и Maven Central
Теперь пошагово сделаем следующее:- Создадим Sonatype аккаунт и зарегистрируем groupId через Jira issue;
- Создадим bintray аккаунт и пакет для клиента;
- Подготовим build.gradle для публикации на bintray, опубликуем.
Шаг 1: создаем bintray аккаунт и пакет для клиента
Что такое bintray и зачем он нам? bintray — это система хранения библиотек, которая выступает посредником между JCenter, Maven Central и другими хранилищами. Чтобы создать аккаунт, переходим по этой ссылке и создаем open-source аккаунт. Далее создаем репозиторий, в котором будут храниться проекты, как показано ниже: Заполняем обязательно Name, Type и опционально Default Licenses и Description. В поле Type выбираем именно Maven, так как он нам нужен: Далее, создаем новый пакет (Add New Package). Заполняем поля:- 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.
Шаг 2: Создание Sonatype аккаунта и регистрация groupId через jira issue
Создаем аккаунт в Sonatype и после создания нажимаем на Create нового Jira тикета. Здесь указываем ссылку на проект, на .git также, как и в bintray. Так будет выглядеть Jira тикет: Созданный Jira Issue будет обрабатываться человеком в течение 2-3 рабочих дней. Если все пройдет успешно, вам ответят, что groupId - com.github.romankh3 подготовлен: Теперь привяжем Sonatype аккаунт, который мы создали к bintray. Для этого заходим в секцию Edit profile в bintray: Двигаемся дальше!Шаг 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 можно найти, как показано ниже на картинке:
Итоговый 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 закончен успешно!
Кому показалось, что сделать это просто — вы невероятные люди и удивить вас сложно :)
Часть 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: управляя зависимостями
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ