Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What version manager should I use to manage multiple Scala versions?

Tags:

scala

I come from a background in Ruby, and I use RVM to manage multiple Ruby and gemsets. I have googled around, and I found these two SVM and PVM, not sure what should I use? Anyone can recommend what should I use to manage multiple scala?

PVM Play Version Manager https://github.com/kaiinkinen/pvm

SVM Scala Version Manager https://github.com/yuroyoro/svm

like image 343
wedy Avatar asked May 26 '14 11:05

wedy


People also ask

What is crossScalaVersions?

SBT's crossScalaVersions allows projects to compile with multiple versions of Scala. However, crossScalaVersions is a hack that reuses projects by mutates settings.

How can I change SBT version?

Create or open your sbt project. In the Project tool window, in the source root directory, locate the build. properties file and open it in the editor. In the editor explicitly specify the version of sbt that you want to use in the project.


1 Answers

You don't need a version manager. You need a build tool.

Scala projects work differently than Ruby projects. If you use SBT as a build tool, you specify the Scala version in your build file:

//build.sbt

scalaVersion := "2.11.0" // or some other version

SBT then proceeds to download the specified Scala version for you if it hasn't been downloaded before, and builds and runs your project with this version. If you want, you can even specify which version of SBT you want, and it'll arrange everything for you as well.

This is because Scala, contrary to Ruby, is a compiled language - it must be compiled/built before running. Ruby projects don't have a build process, and can be (attempted to) run on any Ruby version. Scala projects might not build on incompatible versions, let alone run, so you need to specify which Scala version your project is supposed to be built against.

There's also no such thing as gemsets for Scala. For Ruby, gems were originally system-wide libraries and executables, shared by all Ruby scripts on the system. Therefore, gems override each other and you need to maintain gemsets with the specific versions you require for each project. In Scala, a dependency is just a library specifically for your project. They don't override each other, and you just specify which version you need in your build file. SBT then automatically downloads it for you when you build.

This just works:

// myproject1/build.sbt
scalaVersion := "2.10.2"

libraryDependencies += "com.typesafe.akka" %% "akka-actor" % "2.2.0"


// myproject2/build.sbt
scalaVersion := "2.11.0"

libraryDependencies += "com.typesafe.akka" %% "akka-actor" % "2.3.3"
like image 119
DCKing Avatar answered Oct 21 '22 13:10

DCKing