将 SBT 项目发布到本地目录
Posted
技术标签:
【中文标题】将 SBT 项目发布到本地目录【英文标题】:Publish SBT project to local directory 【发布时间】:2012-07-06 02:43:45 【问题描述】:我正在尝试在我的个人网络服务器上发布我的一些 SBT 项目。据我所知,您通常将 SBT 项目导出为 Maven 目录,其中包括 POM.xml,其中包含项目定义。
作为Brian Clapper pointed out,您可以通过创建多个配置文件并使用sbt publish
来发布这样的Maven 存储库。在他的教程中,存储库是通过 FTP 传输的。
我想手动将我的 Maven 存储库推送到服务器,以便拥有更多控制权。你能给我一些提示,如何做到这一点?
【问题讨论】:
【参考方案1】:我想出了如何做到这一点。该解决方案创建了一个与 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"))
之后,您可以发布您的版本
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
您可以将生成的文件放在任何 Web 服务器上(例如 http://repo.example.org/),并通过在您的 build.sbt
中添加以下行来在另一个项目的构建脚本中使用它:
resolvers += "Personal repository" at "http://repo.example.org/"
libraryDependencies += "org.example" % "project-name" % "0.0.0"
有关详细信息,请参阅SBT: Getting Started Library Dependencies 和 SBT: Publishing。
【讨论】:
【参考方案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 Web 界面的凭据相同。
【讨论】:
但这会创建一个 Ivy 存储库,而不是 Maven 存储库。常春藤存储库有什么好处吗?我也不打算使用 Sonatype Nexus,所以凭据部分与我无关。 生成的 POM 文件看起来像一个 Maven POM XML。它们不兼容吗? 请让我知道它是否有效。 Ivy + Nexus + sbt 自动发布是我使用的唯一设置。 同时我切换到 Gradle,它有更好的文档和 Scala 支持也很好。此外,发布 Maven-repos 也容易得多。 maven.vorb.de 有时间我会检查一下,Ivy 的目录结构是否也适用于 Maven 和 Gradle。 使用publishTo
和文件解析器效果很好:***.com/a/11632776/432354以上是关于将 SBT 项目发布到本地目录的主要内容,如果未能解决你的问题,请参考以下文章