我是Scala / SBT的新手,我很难理解如何仅尝试一个包的类和功能,以了解它们的含义,并能体会到它们。例如,使用https://github.com/plokhotnyuk/rtree2d。我想做的是这样的(在项目的顶层文件夹中)
# sbt
> console
> import com.github.plokhotnyuk.rtree2d.core._
...
等等。但这将无法工作,因为即使在项目中也无法找到导入。我为这个模糊的问题表示歉意,尽管我希望通过挥手可以清楚地知道我想做什么。另一种表达方式可能是,我正在寻找某种东西,例如直观的易用性,而这正是我在Python中理所当然的事情-仅使用bash和解释器。作为最后的选择,我可以创建一个单独的项目,然后导入此包并编写一个Main
对象,但这对于我想做的事情来说似乎太round回事且麻烦。我还想尽可能避免使用IDE,因为我从来没有真正控制过它们,因为它们在后台进行了各种各样的事情,从而增加了很多体积和复杂性。
rtree2d
利用sbt的多模块功能;这样做的常见用途是将核心功能放在模块中,而在依赖于核心的模块中具有较少的核心方面(例如,更高级别的API或与其他项目的集成):所有这些模块都可以独立发布,并具有各自的功能。自己的依赖关系。
可以在build.sbt
文件中看到:
// The main project -- LR
lazy val rtree2d = project.in(file("."))
.aggregate(`rtree2d-coreJVM`, `rtree2d-coreJS`, `rtree2d-benchmark`)
// details omitted --LR
// Defines the basic skeleton for the core JVM and JS projects --LR
lazy val `rtree2d-core` = crossProject(JVMPlatform, JSPlatform)
// details omitted
// Turns the skeleton into the core JVM project --LR
lazy val `rtree2d-coreJVM` = `rtree2d-core`.jvm
// Turns the skeleton into the core JS project --LR
lazy val `rtree2d-coreJS` = `rtree2d-core`.js
lazy val `rtree2d-benchmark` = project
在sbt中,可以使用来将命令的作用域限定于特定模块module/command
,因此在交互式sbt shell(从顶层开始)中,您可以执行
> rtree2d-coreJVM/console
在JVM核心模块中运行控制台。您也可以sbt 'rtree2d-coreJVM/console'
直接从顶层的shell运行,尽管这可能需要对shell引用等进行一些注意。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句