Вступление
Что бы вы ни говорили о JavaScript, но npm невероятно упростил публикацию кода для любого пользователя. Всего за несколько кликов вы можете поделиться библиотекой, чтобы облегчить жизнь другим, или опубликовать небольшой фрагмент, например left-pad
, чтобы вызвать бесконечные головные боли.
Java уже давно имеет репозиторий Maven (и сопутствующий инструмент сборки с тем же именем), который служит аналогичной цели: совместное использование упакованного кода.
Но для новичка публикация в Maven может быть пугающей – вот тут-то и появляется Sonatype.
Центральный репозиторий Sonatype, Inc. (дополнение к репозиторию Apache Maven) позволяет очень легко обмениваться кодом. С помощью всего нескольких строк и нескольких шагов вручную вы можете опубликовать свой пакет в Maven, а другие пользователи могут легко импортировать его и использовать.
sbt Руководство по использованию Sonatype и Sonatype Руководство по развертыванию охватывают, вероятно, 95% того, что вам нужно знать для этого процесса, но есть несколько ошибок который я выделю ниже, используя эмодзи с восклицательным знаком ❗ .
Примечание: на протяжении всего этого руководства я предполагаю, что ваш исходный код размещен в репозитории GitHub, и поэтому все инструкции специфичны для GitHub.
Шаги
1. Создайте проблему Sonatype Jira
Sonatype синхронизируется с Maven, и поэтому для публикации в Maven вы можете опубликовать через Sonatype. Для этого вам понадобится учетная запись Sonatype Jira, чтобы создать проблему. Сделайте это, нажав здесь, чтобы создать учетную запись а затем нажмите здесь, чтобы создать проблему Jira .
В качестве примера вот билет, который я открыл для публикации моего проекта в Maven. Если вы хотите опубликовать несколько пакетов в Maven с помощью Sonatype, вам нужно будет создать несколько билетов Jira, но вам нужна только одна учетная запись пользователя.
Поля в Jira легко заполняются:
Резюме
Это должно включать название проекта. В моем случае я публикую небольшой проект, размещенный по адресу В моем случае я публикую небольшой проект, размещенный по адресу
Идентификатор группы
Это должно быть что-то вроде io.github.awsmm
или аналогичный для вашего имени пользователя на GitHub. См. это руководство для получения дополнительной информации о координатах пакета.
❗ попался: это не должно не должно быть что-то вроде com.github.awsmm
. com.github
координаты больше не поддерживаются.
URL-адрес проекта
Здесь пользователи могут зайти в Интернет, чтобы найти информацию о вашем проекте. Для меня это https://github.com/awwsmm/zepto
, но это может быть github.io
страница или страница на вашем личном веб-сайте, или что-то еще.
URL-адрес SCM
Это URL-адрес, по которому размещен ваш исходный код. Для меня это https://github.com/awwsmm/zepto.git
.
2. Генерировать и распространять ключ PGP
Мы будем использовать ключ PGP для подписи этого пакета, чтобы пользователи могли быть уверены, что вы тот человек, который его создал. Чтобы сделать это, вы можете в основном следовать инструкциям из scala-sbt.org …
Установите GnuPG (в Mac OS вы можете сделать это через brew install gnupg
) и убедитесь, что он установлен, проверив версию
$ gpg --version gpg (GnuPG) 2.3.1 ...
Затем сгенерируйте ключ…
$ gpg --gen-key
…перечислите свои ключи…
$ gpg --list-keys gpg: checking the trustdb gpg: marginals needed: 3 completes needed: 1 trust model: pgp gpg: depth: 0 valid: 1 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 1u gpg: next trustdb check due at 2023-07-11 /Users/andrew.watson/.gnupg/pubring.kbx --------------------------------------- pub ed25519 2021-07-11 [SC] [expires: 2023-07-11] 1234517530FB96F147C6A146A326F592D39AAAAA uid [ultimate] Andrew Watsonsub cv25519 2021-07-11 [E] [expires: 2023-07-11]
…и распространите ключ на какой-нибудь сервер ключей GPG, например
$ gpg --keyserver keyserver.ubuntu.com --send-keys 1234517530FB96F147C6A146A326F592D39AAAAA gpg: sending key A326F592D39AAAAA to hkp://keyserver.ubuntu.com
❗ попался: руководство по scala-sbt указывает вам распространять ключ по адресу hkp://pool.sks-keyservers.net
, но это приводит к сбою отправки сервера ключей: Нет имени
ошибка, так как сервер ключей больше не активен. Вместо этого вы можете использовать любой другой крупный сервер ключей GPG , как в Ubuntu, который я использовал выше.
Леонард отмечает здесь , что синхронизация этих ключей между различными серверами ключей может занять некоторое время, но для меня это сработало почти мгновенно.
3. Включить sbt-pgp
Как описано здесь , затем вы захотите добавить sbt-pgp
подключитесь к своему проекту. Вы можете добавить его в файл
plugin.sbt вашего проекта или вы можете добавить его в
~/.sbt/1.0/plugins/gpg.sbt
addSbtPlugin("com.github.sbt" % "sbt-pgp" % "2.1.2")
Последнюю версию этого плагина можно найти на странице проекта GitHub .
4. Добавьте свои учетные данные Sonatype в свой проект
Затем добавьте свои учетные данные в свой проект, следуя инструкциям в Шаг 3 здесь. Я воспроизведу их, чтобы было понятнее…
Создайте файл по адресу
$HOME/.sbt/1.0/sonatype.sbt
И добавьте к нему следующую строку
credentials += Credentials(Path.userHome / ".sbt" / "sonatype_credentials")
Затем создайте файл учетных данных по адресу
~/.sbt/sonatype_credentials
Добавьте в этот файл следующую информацию
realm=Sonatype Nexus Repository Manager host=s01.oss.sonatype.org user=password=
user
и password
здесь те же имя пользователя и пароль, которые вы использовали при создании своей учетной записи на сервере Sonatype Jira на шаге 1. Вам не нужно беспокоиться о том, чтобы заключать здесь что-либо в кавычки – пробелы в порядке вещей. Но…
❗ ПОПАЛСЯ: …будь осторожен! Руководство по адресу scala-sbt.org
говорит установить хост= Руководство по адресу
scala-sbt.org говорит установить
хост= , но это недавно изменилось на host= s01.oss.sonatype.org
5. Настройте свой publish.sbt
Предпоследним шагом в этом процессе является настройка вашего проекта для публикации, добавив кучу информации либо в build.sbt
вашего проекта (или, как я рекомендую) опубликовать файл.sbt
.
Замените username
на ваше имя пользователя на GitHub ниже, project
на название проекта (в моем случае это awwsmm
и zepto
соответственно) и все другие очевидные биты для заполнения и вставьте их в файл publish.sbt
в корне вашего проекта
ThisBuild / organization := "io.github.username" ThisBuild / organizationName := "username" ThisBuild / organizationHomepage := Some(url("https://www.yourwebsite.com")) ThisBuild / scmInfo := Some( ScmInfo( url("https://github.com/username/project"), "scm:git@github.username/project.git" ) ) ThisBuild / developers := List( Developer( id = "username", name = "Your Name Goes Here", email = "youremail@address.com", url = url("https://www.yourwebsite.com") ) ) ThisBuild / description := "Describe your project here..." ThisBuild / licenses := List("The Unlicense" -> new URL("https://unlicense.org/")) ThisBuild / homepage := Some(url("https://github.com/username/project")) // Remove all additional repository other than Maven Central from POM ThisBuild / pomIncludeRepository := { _ => false } ThisBuild / publishTo := { val nexus = "https://s01.oss.sonatype.org/" if (isSnapshot.value) Some("snapshots" at nexus + "content/repositories/snapshots") else Some("releases" at nexus + "service/local/staging/deploy/maven2") } ThisBuild / publishMavenStyle := true ThisBuild / versionScheme := Some("early-semver")
Вы можете установить licenses
на то, что вы считаете подходящим. Вот руководство GitHub по выбору лицензии для вашего репозитория – хотя имейте в виду, что они вероятно, игнорируют его во всяком случае.
❗ ПОНЯЛ: Обратите внимание, что мы также использовали s01.oss.sonatype.org
выше!
6. Публикуйте!
Как только вы все это настроите, вы сможете опубликовать свой проект из sbt
оболочка с
publishSigned
sbt:zepto> publishSigned [info] Wrote /local/path/to/zepto_2.13-0.4.0.pom [info] published zepto_2.13 to https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/io/github/awwsmm/zepto_2.13/0.4.0/zepto_2.13-0.4.0-sources.jar [info] published zepto_2.13 to https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/io/github/awwsmm/zepto_2.13/0.4.0/zepto_2.13-0.4.0-javadoc.jar [info] published zepto_2.13 to https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/io/github/awwsmm/zepto_2.13/0.4.0/zepto_2.13-0.4.0-javadoc.jar.asc ...
Вы можете использовать свое имя пользователя и пароль Sonatype для входа в https://s01.oss.sonatype.org/ где вы теперь должны увидеть свой (предварительный релиз) проект!
Выберите проект, нажмите Закройте
из меню, а затем Отпустите
. Вы должны увидеть свой проект на Maven почти сразу, хотя для отображения в поисковой системе потребуется несколько часов .
…и это все!
Теперь вы должны иметь возможность импортировать свою опубликованную библиотеку в другие проекты, добавив
"io.github.awwsmm" %% "zepto" % "0.4.0"
((или все, что подходит) к libraryDependencies
в build.sbt
другого проекта.
Я написал это руководство в основном для того, чтобы запомнить GOTCHA s Я столкнулся с этим выше, но, надеюсь, это облегчит кому-то другому публикацию своего проекта Scala в Maven. Это то, что я хотел попробовать какое-то время, но до недавнего времени у меня не было времени.
Не стесняйтесь комментировать ниже любые вопросы или предложения, которые у вас могут возникнуть. И спасибо за чтение!
Оригинал: “https://dev.to/awwsmm/publish-your-scala-project-to-maven-in-5-minutes-with-sonatype-326l”