免责声明:我是sbt和Scala的新手,所以我可能会遗漏明显的事情。
我的目标是将Scala编译器用作我主项目中的库。我最初是通过手动将scala jar放在我的项目中的 libs 目录中,然后在我的类路径中包含该dir来实现的。请注意,当时我没有使用sbt。现在,我想使用sbt并从github下载scala源代码,构建scala jar,然后构建我的项目。我首先创建了两个目录:myProject
和myProject/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
的基本目录在上面的例子中)??
希望这是有道理的。
我真的很感激有关此的任何反馈。
提前致谢!
答案 0 :(得分:1)
在Scala生态系统中,您通常依赖于在Maven或Ivy存储库中发布的二进制工件(库)。实际上所有Scala项目都会发布二进制文件,包括编译器。因此,您只需将以下行添加到项目设置中:
libraryDependencies += "org.scala-lang" % "scala-compiler" % scalaVersion.value
dependsOn
用于同一构建中的子项目之间的依赖关系。
对于浏览源,您可以使用IDE。 IntelliJ IDEA可以轻松导入Sbt项目并下载/附加库依赖项的源代码。 Eclipse有一个Sbt插件也可以这样做。 Ensime也等,或者只是git clone
存储库。