Публикация проекта SBT в локальный каталог

Я пытаюсь опубликовать некоторые из моих проектов SBT на своем личном веб-сервере. Насколько я знаю, вы обычно экспортируете проект SBT в качестве каталога Maven, включая POM.xml, который содержит определения проекта.

Как Брайан Клаппер указал, вы можете опубликовать такой репозиторий Maven, создав несколько файлов конфигурации и используя sbt publish. В своем учебном пособии репозиторий передается через FTP.

Я хочу вручную вывести свой репозиторий Maven на сервер, чтобы у меня было больше контроля. Можете ли вы дать мне несколько советов, как это сделать?

Ответ 1

Я понял, как вы можете это сделать. Это решение создает локальный репозиторий Ivy, который совместим с Maven.

Вы должны установить следующие значения в build.sbt:

name := "project-name"

organization := "org.example"

version := "0.0.0"

scalaVersion := "2.9.2"

publishTo := Some(Resolver.file("file", new File("/path/to/your/releases"))

После этого вы можете опубликовать свой выпуск

sbt publish

Это напечатает что-то вроде следующих строк

[info] Set current project to project-name (in build file:/path/to/your/project/)
[info] Updating {file:/path/to/your/project/}default-2e51ea...
[info] Packaging /path/to/your/project/target/scala-2.9.2/project-name_2.9.2-0.0.0-S
NAPSHOT-sources.jar ...
[info] Resolving org.scala-lang#scala-library;2.9.2 ...
[info] Done packaging.
[info] Done updating.
[info] :: delivering :: org.example#project-name_2.9.2;0.0.0 :: 0.0.0 :: release :: Tue Jul 24 15:41:04 CEST 2012
[info]  delivering ivy file to /path/to/your/project/target/scala-2.9.2/ivy-0.0.0.xml
[info] Wrote /path/to/your/project/target/scala-2.9.2/project-name_2.9.2-0.0.0.pom
[info] Packaging /path/to/your/project/target/scala-2.9.2/project-name_2.9.2-0.0.0.jar ...
[info] Done packaging.
[info]  published project-name_2.9.2 to /path/to/your/releases/org/example/project-name_2.9.2/0.0.0-SNAPSHOT/project-name_2.9.2-0.0.0.pom
[info]  published project-name_2.9.2 to /path/to/your/releases/org/example/project-name_2.9.2/0.0.0-SNAPSHOT/project-name_2.9.2-0.0.0.jar
[info]  published project-name_2.9.2 to /path/to/your/releases/org/example/project-name_2.9.2/0.0.0-SNAPSHOT/project-name_2.9.2-0.0.0-sources.jar
[info]  published project-name_2.9.2 to /path/to/your/releases/org/example/project-name_2.9.2/0.0.0-SNAPSHOT/project-name_2.9.2-0.0.0-javadoc.jar
[success] Total time: 1 s, completed 24.07.2012 15:41:05

Вы можете поместить сгенерированные файлы на любой веб-сервер (например, http://repo.example.org/) и использовать его в сборке script другого проекта, добавив следующие строки на build.sbt:

resolvers += "Personal repository" at "http://repo.example.org/"

libraryDependencies += "org.example" % "project-name" % "0.0.0"

Для получения дополнительной информации см. SBT: "Запуск зависимостей библиотеки" и SBT: публикация.

Ответ 2

Из sbt вы можете использовать

project myproject
[myproject] $ publish-local

который будет опубликован в вашем локальном каталоге плюща (обычно ~/.ivy2/local).

В выводе вы увидите пути всех файлов:

[info] Done packaging.
[info] published myproject_2.9.1 to .../ivy2/...myproject.../poms/myproject_2.9.1.pom
[info] published myproject_2.9.1 to .../ivy2/...myproject.../jars/myproject_2.9.1.jar
[info] published myproject_2.9.1 to .../ivy2/...myproject.../srcs/myproject_2.9.1-sources.jar
[info] published myproject_2.9.1 to .../ivy2/...myproject.../docs/myproject_2.9.1-javadoc.jar
[info] published ivy to .../ivy2/...myproject.../ivys/ivy.xml

Затем вы можете захватить эти файлы и загрузить их на ftp-сервер.

Я бы по-прежнему рекомендовал подход, описанный в связанном блоге. По крайней мере, как мы это делаем. Небольшая заметка о сохранении учетных данных. Используйте следующую настройку sbt:

val credentials = Credentials(Path.userHome / ".ivy2" / ".my-credentials")

Файл учетных данных будет выглядеть следующим образом:

realm=Sonatype Nexus Repository Manager
host=nexus.example.com
user=deployment
password=pass

Учетные данные те же, что вы используете для входа в веб-интерфейс Nexus.