I'm using sbt .13 here.
I have this so far:
import sbt._ import Keys._ import play.Project._ object ApplicationBuild extends Build { val appVersion = "1.0" resolvers += "local maven" at "/Users/blankman/.m2/repository/" val commonDependencies = Seq() val modelDependencies = Seq( "com.typesafe.slick" %% "slick" % "2.0.1", "org.slf4j" % "slf4j-nop" % "1.6.4" ) val serviceDependencies = Seq( "com.typesafe.slick" %% "slick" % "2.0.1", "org.slf4j" % "slf4j-nop" % "1.6.4" ) val webDependencies = Seq( //"org.apache.tomcat" % "tomcat-jdbc" % "8.0.3", "mysql" % "mysql-connector-java" % "5.1.30", "com.typesafe.slick" %% "slick" % "2.0.1" ) lazy val common = Project( id = "app-common", base = file("app-common"), dependencies = commonDependencies ) lazy val models = Project( id = "app-models", base = file("app-models"), settings(modelDependencies: _*) ) ).dependsOn(common) lazy val services = Project( id = "app-services", base = file("app-services"), settings = Seq( libraryDependencies ++= serviceDependencies ) ).dependsOn(models, common) lazy val web = play.Project("app-web", appVersion, webDependencies, path = file("app-web")) .settings(playScalaSettings: _*) .dependsOn(services) } This doesn't work. For example, if I go into:
project app-models
and try and compile, it says compile isn't valid or something.
I'm really confused how to set up a project. What is the correct way?
Looking at this slide #10 here http://jsuereth.com/scala/2013/06/11/effective-sbt.html it says I can do:
lazy val web = ( Project("app-models", file("app-models")) settings( libraryDependencies += modelDependencies ) ) But when I do this I get an error also.
I basically have a few projects inside of sbt:
common models services web (which is play) Can someone help me get this to work?
sbt is a popular tool for compiling, running, and testing Scala projects of any size. Using a build tool such as sbt (or Maven/Gradle) becomes essential once you create projects with dependencies or more than one code file.
Delegate a Scala project build to sbtPress Ctrl+Alt+S to open the IDE settings and select Build, Execution, Deployment | Build Tools | sbt. In the sbt projects section, select a project for which you want to configure build actions. In the sbt shell section, select the builds option. Click OK to save the changes.
There are a few issues I found in your build definition, but since you bought up Josh's Effective sbt talk, I think we should go whole hog on the style.
Here are the files.
sbt.version=0.13.2 val playVersion = "2.2.2" resolvers += Resolver.typesafeRepo("releases") addSbtPlugin("com.typesafe.play" % "sbt-plugin" % playVersion) import sbt._ import Keys._ object Commons { val appVersion = "1.0" val settings: Seq[Def.Setting[_]] = Seq( version := appVersion, resolvers += Opts.resolver.mavenLocalFile ) } import sbt._ import Keys._ object Dependencies { val slickVersion = "2.0.1" val slick = "com.typesafe.slick" %% "slick" % slickVersion val slf4jVersion = "1.6.4" val slf4jNop = "org.slf4j" % "slf4j-nop" % slf4jVersion val mysqlConnectorVersion = "5.1.30" val mysqlConnector = "mysql" % "mysql-connector-java" % mysqlConnectorVersion val commonDependencies: Seq[ModuleID] = Seq( slick, slf4jNop ) val modelDependencies: Seq[ModuleID] = Seq() val serviceDependencies: Seq[ModuleID] = Seq() val webDependencies: Seq[ModuleID] = Seq( mysqlConnector ) } import play.Project._ import Dependencies._ lazy val appCommon = (project in file("app-common")). settings(Commons.settings: _*). settings( libraryDependencies ++= commonDependencies ) lazy val appModels = (project in file("app-models")). settings(Commons.settings: _*). settings( libraryDependencies ++= modelDependencies ). dependsOn(appCommon) lazy val appServices = (project in file("app-services")). settings(Commons.settings: _*). settings( libraryDependencies ++= serviceDependencies ). dependsOn(appModels, appCommon) lazy val appWeb = (project in file("app-web")). settings(Commons.settings: _*). settings(playScalaSettings: _*). dependsOn(appServices) For models and services, you're passing in settings sequence into Project(...) constructor, so the default settings are likely not loaded. You can pass in the default settings manually, or use settings(...) method on Project, which I would recommend.
lazy val appModels = (project in file("app-models")). settings( libraryDependencies ++= modelDependencies ). dependsOn(appCommon) Josh uses postfix notation using parenthesis, but I prefer using dot notation for this, so that's a slight deviation from the talk.
As the above example, you have to pass modelDependencies to libraryDependencies. You had it calling directly into settings.
The resolvers setting is not passed into anything, which likely is not correct.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With