sbt:设置远程RootProject

时间:2018-03-13 03:34:17

标签: scala sbt

免责声明:我是sbt和Scala的新手,所以我可能会遗漏明显的事情。

我的目标是将Scala编译器用作我主项目中的库。我最初是通过手动将scala jar放在我的项目中的 libs 目录中,然后在我的类路径中包含该dir来实现的。请注意,当时我没有使用sbt。现在,我想使用sbt并从github下载scala源代码,构建scala jar,然后构建我的项目。我首先创建了两个目录: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 base-directory中的scala/versions.properties文件。

问题:如何设置sbt下载github repo,然后使用该项目的base-directory而不是我的目录来构建它(我的意思是myProject的基本目录在上面的例子中)??

希望这是有道理的。

我真的很感激有关此的任何反馈。

提前致谢!

1 个答案:

答案 0 :(得分:1)

在Scala生态系统中,您通常依赖于在Maven或Ivy存储库中发布的二进制工件(库)。实际上所有Scala项目都会发布二进制文件,包括编译器。因此,您只需将以下行添加到项目设置中:

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

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

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