当前位置: 首页 > 知识库问答 >
问题:

sbt:设置远程根项目的基本目录

浦泳
2023-03-14

免责声明:我是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的基本目录)??

希望这有意义。

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

提前谢谢!


共有1个答案

长孙阳成
2023-03-14

在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)