面向未来的Scala / SBT项目

时间:2015-04-23 04:17:28

标签: scala sbt

我正在尝试在同一个程序中使用scala-graph和scala-swing。我可以使用最新的图形核心库(1.9.2)和最新版本的scala(2.11.6)。我可以使用scala-swing,但是当我这样做时,sbt给了我Scala 2.10.4而不是2.11.6。

当我尝试使用这两个库时,我遇到了错误 - 编译或运行时错误,具体取决于我如何设置build.sbt。所以我尝试使用旧版本的graph-core(1.8.0),如果我正确理解了库的发布历史[1],那么它就是为Scala 2.10设计的。

这样做有效,虽然它导致sbt使用scala 2.10.4而不是2.11.6。我很担心,因为它似乎是一个脆弱的安排。

它会继续工作吗?目前我的build.sbt文件(如下)不限制scalaVersion或scala-compiler版本;它只是说要使用哪个图形和摆动库。我担心图形库,swing库或scala语言本身的更改会破坏代码。

[这篇文章的其余部分描述了我的操作系统,安装和代码;你可能不需要阅读它。]

我使用的是Ubuntu 14.04。我使用apt-get安装了scala和sbt。摆动似乎已经安装在我的机器上。我没有安装图库,但是sbt好像要处理它。

我只有两个文件位于同一个文件夹中:build.sbt和main.scala。 build.sbt看起来像这样:

lazy val root = (project in file(".")).
    settings(
        name := "main",
        version := "1.0",
        libraryDependencies += "org.scala-lang" % "scala-swing" % "2.10.5",
        libraryDependencies += "com.assembla.scala-incubator" %% "graph-core" % "1.8.0"
    )

main.scala看起来像这样:

import scalax.collection.Graph // or scalax.collection.mutable.Graph
import scalax.collection.GraphPredef._, scalax.collection.GraphEdge._
import scala.swing._, scala.swing.event._

object App extends SimpleSwingApplication {
    def top = new MainFrame {
        val g1 = Graph(3~1, 5) // no effect; just tests the constructor
        val button = new Button { text = "Click me" }
        contents = new BoxPanel(Orientation.Vertical) {
            contents += button
            border = Swing.EmptyBorder(30, 30, 10, 30)
        }
    }
} 

感谢。

[1] http://www.scala-graph.org/download/

1 个答案:

答案 0 :(得分:3)

首先,您需要将"org.scala-lang.modules" %% "scala-swing" % "1.0.1"用于2.11。

  

我担心图形库,swing库或scala语言本身的更改会破坏代码。

由于您拥有两个库的特定固定版本,因此新版本的发布不会对其产生影响;但我当然会建议包括scalaVersion。请特别注意%%的效果取决于scalaVersion的效果。