Гайд зі створення клієнта для 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 і use it as pain-free gateway to Maven Central
- Публікація Android бібліотеки в jCenter
- Gradle: керуючи залежностями
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ