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

Статья из группы Java Developer
Гайд по созданию клиента для 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, который я не сливаю в мастер ветку только для того, чтобы те, кто читает предыдущую статью, не удивлялись. Гайд по созданию клиента для Skyscanner API и его публикации в jCenter и Maven Central [Часть 2] - 17

Часть 4: Итог

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

Полезные ссылки:

Смотрите также мои другие статьи:
Комментарии (1)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Roman Beekeeper Уровень 35
11 марта 2021
⚡️UPDATE⚡️ Друзья, создал телеграм-канал 🤓, в котором освещаю свою писательскую деятельность и свою open-source разработку в целом. Присоединяйтесь ✌️