JavaRush /Java блог /Random UA /Гайд зі створення клієнта для Skyscanner API та його публ...
Roman Beekeeper
35 рівень

Гайд зі створення клієнта для Skyscanner API та його публікації в jCenter та Maven Central [Частина 2]

Стаття з групи Random UA
Гайд зі створення клієнта для Skyscanner API та його публікації у jCenver та Maven Central [Частина 1]

Зміст:

Гайд зі створення клієнта для Skyscanner API та його публікації в jCenter та Maven Central [Частина 2] - 1

Частина 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Заповнюємо обов'язково Name, Type та опціонально Default Licenses та Description. У полі Type вибираємо саме Maven, тому що він нам потрібен: Гайд зі створення клієнта для Skyscanner API та його публікації в jCenter та Maven Central [Частина 2] - 3Далі, створюємо новий пакет ( 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 .
Гайд зі створення клієнта для Skyscanner API та його публікації в jCenter та Maven Central [Частина 2] - 4І натискаємо Create Package.

Крок 2: Створення Sonatype облікового запису та реєстрація groupId через jira issue

Створюємо обліковий запис у Sonatype і після створення натискаємо на Create нового Jira тикета. Тут вказуємо посилання на проект, на .git так само, як і в bintray. Гайд зі створення клієнта для Skyscanner API та його публікації в jCenter та Maven Central [Частина 2] - 5Гайд зі створення клієнта для Skyscanner API та його публікації в jCenter та Maven Central [Частина 2] - 6Так буде виглядати Jira тикет: Гайд зі створення клієнта для Skyscanner API та його публікації в jCenter та Maven Central [Частина 2] - 7Створений Jira Issue буде оброблятись людиною протягом 2-3 робочих днів. Якщо все пройде успішно, вам дадуть відповідь, що groupId - com.github.romankh3 підготовлений: Гайд зі створення клієнта для Skyscanner API та його публікації в jCenter та Maven Central [Частина 2] - 8Тепер прив'яжемо Sonatype аккаунт, який ми створабо до bintray. Для цього заходимо до секції Edit profile у bintray: Гайд зі створення клієнта для Skyscanner API та його публікації в jCenter та Maven Central [Частина 2] - 9Рухаємось далі!

Крок 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Підсумковий build.gradle буде виглядати так . Після пишемо в терміналі або запускаємо через IDEA gradlew bintrayUpload і все готово! Результат буде лежати на bintray обліковому записі як показано нижче: Гайд зі створення клієнта для Skyscanner API та його публікації в jCenter та Maven Central [Частина 2] - 11Це означає, що ми успішно опублікували клієнт, але він ще не знаходиться ні в Maven Central ні в jCentral. Щоб додати клієнт до jCenter, потрібно натиснути Add to jCenter , потім ввести groupId, під яким буде проект, як зазначено нижче: Гайд зі створення клієнта для Skyscanner API та його публікації в jCenter та Maven Central [Частина 2] - 12Тепер чекаємо, поки обробиться запит. після цього можна буде синхронізувати клієнт із jCenter. Протягом доби надійшла відповідь, що запит на додавання клієнта підтверджено: Гайд зі створення клієнта для Skyscanner API та його публікації в jCenter та Maven Central [Частина 2] - 13Тепер залишився останній крок: додати клієнт до Maven Central. Для цього потрібно знайти в пакеті клієнта опцію Maven Central : Гайд зі створення клієнта для Skyscanner API та його публікації в jCenter та Maven Central [Частина 2] - 14Ми вже прив'язали Sonatype акаунт, тому залишається натиснути тільки Sync , як показано нижче: Гайд зі створення клієнта для Skyscanner API та його публікації в jCenter та Maven Central [Частина 2] - 15І ось така бажана відповідь буде, як тільки Sonatype дозволить опублікувати в Maven Central: Гайд зі створення клієнта для Skyscanner API та його публікації в jCenter та Maven Central [Частина 2] - 16Причому з цієї картинки можемо зробити висновок, що валідація пройшла успішно і клієнт був успішно опублікований на 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;

  • і все :)

Результат можна подивитися у відкритому Pull-Request'e , який я не зливаю в майстер гілку лише для того, щоб ті, хто читає попередню статтю, не дивувалися.

Частина 4: Підсумок

  • Написаний клієнт для Skyscanner API у вигляді окремого проекту .
  • Зроблено тернистий шлях публікації клієнта в Maven Central і jCenter через bintray .
  • Успішно використано клієнта для потреб проекту — flights-monitoring.
  • Ця стаття може бути використана як покроковий посібник для тих, хто хоче стати на шлях open-source.

Корисні посилання:

Дивіться також інші мої статті:
Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ