Я хочу добавить библиотеку scala в свои build.sbt
зависимости. Вот пример пакета, и он публикуется в реестре Github.
Эта библиотека не из официального репозитория maven, я не смог найти ее в репозитории Maven. Я думаю, что он не мог установить там.
<dependency>
<groupId>gjuoun</groupId>
<artifactId>hellopackage_2.13</artifactId>
<version>0.1.6</version>
</dependency>
И затем я считаю, что это должно принадлежать ghcr.io
, поэтому я добавляю эту строку в свой build.sbt
.
resolvers += "hellopackage" at "http://ghcr.io/gjuoun/hellopackage"
Это вообще не работает. Я не мог его использовать. Я ищу лучший способ установить этот пакет, используя resolvers
без addSbtPlugin
. (Я не хочу использовать pom.xml
, если это возможно)
Спасибо за любую помощь.
Не могли бы вы быть более конкретным, когда вы говорите «это не работает»? Что такое журналы SBT? Вы видите попытку получить артефакт с ghcr.io? Какой-нибудь код/сообщение об ошибке?
@GaëlJ Ошибка в том, что проект не может найти библиотеку. Похоже, я не правильно добавил зависимость. http://ghcr.io/gjuoun/hellopackage
неправильно, но я не знаю, как добавить эту библиотеку в качестве моей зависимости в build.sbt
.
@DmytroMitin Спасибо. поэтому, если я хочу установить библиотеку локально, мне приходится постоянно использовать PAT. Это правильно?
@JoeYo Да, вы должны использовать токен (см. ответ по ссылке). Либо тот, который вы обычно используете, либо вы можете создать отдельный с необходимыми минимальными правами для этой задачи. После первой успешной сборки jar библиотеки будет кэшироваться локально, sbt будет использовать ее в первую очередь вместо реестра github, пока что-то не произойдет с кешем.
@JoeYo Вы тоже всегда можете поставить баночку lib
.
@JoeYo Почему ты не хочешь использовать плагин sbt?
@JoeYo может быть полезно для будущих читателей, если вы скопируете и вставите в свое сообщение полный журнал ошибок, который SBT дает вам
@DmytroMitin Большое спасибо за вашу помощь, я наконец решил использовать плагин, я тратил время на поиск установочных пакетов, не проходя PAT. Во всяком случае, это решение работает для меня.
См. подробности в Зависимость http4s-request-signer_2.13 не загружается из центрального репозитория
build.sbt
// specifying repo is optional: "_"
resolvers += "Another maven repo" at "https://maven.pkg.github.com/gjuoun/_"
credentials += Credentials(
"GitHub Package Registry",
"maven.pkg.github.com",
"_", // user is ignored
"ghp_YOUR_GITHUB_TOKEN"
)
libraryDependencies += "gjuoun" %% "hellopackage" % "0.1.6"
Это в основном то, что плагин делает.
Из соображений безопасности лучше не хардкодить токен в build.sbt
, а, например, поместить его в переменную окружения.
credentials += Credentials(
"GitHub Package Registry",
"maven.pkg.github.com",
"_",
sys.env("GITHUB_TOKEN")
)
Вы можете убедиться, что без credentials
sbt не сможет собрать ваш проект.
Дело в том, что хотя вручную вы можете скачать JAR с Github в браузере без авторизации (и поместить в lib
), это не значит, что Github позволяет читать, резолвить, скачивать программно через API (sbt, ivy, coursier) без аутентификация.
Вам нужна аутентификация только в первый раз. Тогда JAR будет кэшироваться локально в ~/.cache/coursier/v1/https/maven.pkg.github.com/gjuoun/_/gjuoun/hellopackage_2.13/0.1.6/
и в дальнейшем будет браться оттуда.
Несколько цитат:
Действительный токен Github не всегда должен быть обязательным # 28
GitHub требует токен даже для доступа к пакетам только для чтения.
Учетные данные должны оставаться необязательными #34
Итак, проблема, с которой я столкнулся, заключается в том, что разрешение из пакетов GitHub также требует токена. Вы не можете просто загрузить пакет без проверки подлинности, а это означает, что учетные данные необходимы всегда, независимо от того, публикуете ли вы или нет. Честно говоря, это то, что GitHub нужно исправить.