【问题标题】:sbt: set the base-directory of a remote RootProjectsbt:设置远程 RootProject 的基目录
【发布时间】:2018-08-21 05:17:52
【问题描述】:

免责声明:我是 sbt 和 Scala 的新手,所以我可能会遗漏一些明显的东西。

我的目标是使用 Scala 编译器作为我主项目中的库。我最初是通过手动将 scala jar 放在项目中的 libs 目录中,然后将该目录包含在我的类路径中来实现的。请注意,当时我没有使用 sbt。现在,我想使用 sbt 并从 github 下载 scala 源,构建 scala jar,然后构建我的项目。我首先创建 2 个目录:myProjectmyProject/project。然后我创建以下 4 个文件:

sbt 版本文件:

// File 1: project/build.properties
sbt.version=0.13.17

插件文件(与本题无关):

// File 2: project/plugins.sbt
addSbtPlugin("com.eed3si9n" % "sbt-buildinfo" % "0.7.0")

build.sbt 文件:

// File 3: build.sbt
lazy val root = (project in file(".")).
  settings(
    inThisBuild(List(
      organization := "me",
      scalaVersion := "2.11.12",
      version      := "0.1.0-SNAPSHOT"
    )),
    name := "a name"
  ).dependsOn(ScalaDep)

lazy val ScalaDep = RootProject(uri("https://github.com/scala/scala.git"))

我的源文件:

// File 4: Test.scala
import scala.tools.nsc.MainClass

object Test extends App {
    println("Hello World !")
}

如果我在myProject 中运行 sbt,那么 sbt 将从 github 下载 scala 源代码,然后尝试编译它们。问题是基本目录仍然是myProject。这意味着如果 scala sbt 源文件引用了 scala 基本目录中的内容,他们将找不到它。例如,scala/project/VersionUtil.scala 文件试图打开位于 scala 基目录中的scala/versions.properties 文件。

问题:如何设置 sbt 以下载 github 存储库,然后使用该项目的基本目录而不是我的(我的意思是 myProject 的基本目录在上面的例子)??

希望这是有道理的。

我非常感谢您对此的任何反馈。

提前致谢!

【问题讨论】:

    标签: scala sbt


    【解决方案1】:

    在 Scala 生态系统中,您通常依赖于在 Maven 或 Ivy 存储库中发布的二进制工件(库)。几乎所有 Scala 项目都发布二进制文件,包括编译器。所以你所要做的就是将下面的行添加到你的项目设置中:

    libraryDependencies += "org.scala-lang" % "scala-compiler" % scalaVersion.value
    

    dependsOn用于同一构建中子项目之间的依赖关系。

    对于浏览源,您可以使用 IDE。 IntelliJ IDEA 可以轻松导入 Sbt 项目并下载/附加库依赖项的源代码。 Eclipse 有一个 Sbt 插件可以做同样的事情。 Ensime 也可以,等等。或者只是 git clone 存储库。

    【讨论】:

    • 谢谢@lulian!这就说得通了。我会这样做的。
    猜你喜欢
    • 2016-11-22
    • 1970-01-01
    • 2012-09-09
    • 1970-01-01
    • 2015-11-22
    • 2013-11-18
    • 2015-02-11
    • 2014-02-18
    • 2014-03-31
    相关资源
    最近更新 更多