免责声明:我是sbt和Scala的新手,所以我可能会错过一些明显的东西。
我的目标是将Scala编译器用作我主要项目中的库。我最初是通过手动将scala JAR放在项目的libs目录中,然后将该目录包含在我的类路径中来实现的。注意,当时我没有使用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")
构建。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/versions。属性位于scala基本目录中的文件。
问题:如何设置sbt下载github存储库,然后使用该项目的基本目录而不是我的基本目录构建它(在上面的示例中,我的意思是
myProject
的基本目录)??
希望这有意义。
我非常感谢您对此的任何反馈。
提前谢谢!
在Scala生态系统中,您通常依赖于在Maven或Ivy存储库中发布的二进制工件(库)。几乎所有Scala项目都发布二进制文件,包括编译器。因此,您所要做的就是将以下行添加到您的项目设置中:
libraryDependencies += "org.scala-lang" % "scala-compiler" % scalaVersion.value
dependsOn
用于同一构建中的子项目之间的依赖关系。
对于浏览源代码,可以使用IDE。IntelliJ IDEA可以很容易地导入Sbt项目,并下载/附加库依赖的源。Eclipse有一个Sbt插件,可以实现同样的功能。Ensime等,或者只是对存储库进行git克隆。
sbt子项目是否可以有自己的目录?或者只有根项目可以用。Scala帮助器文件为构建项目的目录?。下面是我目前的建筑结构。无法访问中定义的对象。 更新:sub-project-1/build.sbt中的以下sbt定义 由于以下错误而失败 Common在/my-project/projects/Common.scala中定义,没有问题。但是Localhost是在/my-project/sub-proj
我正在尝试使用sbt-native-packager构建一个Debian包,如本文build.sbt所述。 我使用以下设置 如图所示。 在跟进之前,我想了解一下其他的方法。
我正在使用sbt 0.13.12,这是我的项目 在构建中。sbt取决于公共。如果我按sbt project sub1 run运行就可以了。但是,当我将子项目打包为jar文件时,我运行sub1。jar文件中,错误显示sub1无法找到一类公共的。 我的目的是包装sub1。jar和sub2。在每个jar文件中编译带有通用代码的jar。 --更新-- 我尝试作为建议回答。运行时遇到这个问题: 而且,是的!
我有一个scala play应用程序;我正试图为我们的服务暴露健康检查。健康检查的一部分,我想捕捉项目工件版本。 惰性val root=(文件中的项目(“.”)).EnablePlugins(PlayScala)