将SBT项目发布到本地目录

pvo*_*orb 11 maven sbt

我试图在我的个人网络服务器上发布我的一些SBT项目.据我所知,您通常将SBT项目导出为包含POM.xml的Maven目录,该目录包含项目定义.

正如Brian Clapper指出的那样,您可以通过创建几个配置文件并使用来发布这样的Maven存储库sbt publish.在他的教程中,存储库通过FTP传输.

我想手动将我的Maven存储库推送到服务器,以便我有更多的控制权.你能给我一些提示,如何做到这一点?

pvo*_*orb 16

我想你怎么能这样做.此解决方案创建了一个与Maven兼容的本地Ivy存储库.

您必须在以下内容中设置以下值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"))
Run Code Online (Sandbox Code Playgroud)

之后,您可以发布您的版本

sbt publish
Run Code Online (Sandbox Code Playgroud)

这将打印类似以下行的内容

[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
Run Code Online (Sandbox Code Playgroud)

您可以将生成的文件放在任何Web服务器上(例如http://repo.example.org/),并在以下行中添加以下行,在另一个项目的构建脚本中使用它build.sbt:

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

libraryDependencies += "org.example" % "project-name" % "0.0.0"
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅SBT:入门库依赖关系SBT:发布.


Mar*_*cek 8

从sbt,你可以使用

project myproject
[myproject] $ publish-local
Run Code Online (Sandbox Code Playgroud)

哪个将发布到您当地的常春藤目录(通常~/.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
Run Code Online (Sandbox Code Playgroud)

然后你可以抓取这些文件并将它们上传到你的ftp服务器.

我仍然会推荐链接的博客文章中描述的方法.至少我们是这样做的.关于存储凭证的一个小注释.使用以下sbt设置:

val credentials = Credentials(Path.userHome / ".ivy2" / ".my-credentials")
Run Code Online (Sandbox Code Playgroud)

凭证文件如下所示:

realm=Sonatype Nexus Repository Manager
host=nexus.example.com
user=deployment
password=pass
Run Code Online (Sandbox Code Playgroud)

凭据与用于登录Nexus Web界面的凭据相同.