i'm trying make play framework project scala.js on frontend , 1 shared project. sbt configuration is:
import sbt.project.projecttoref lazy val scalav = "2.11.8" lazy val shared = (crossproject.crosstype(crosstype.pure) in file("shared")) .settings( scalaversion := scalav, librarydependencies ++= seq( "com.mediamath" %%% "scala-json" % "1.0" ), resolvers += "mmreleases" @ "https://artifactory.mediamath.com/artifactory/libs-release-global", addcompilerplugin("org.scalamacros" % "paradise" % "2.1.0" cross crossversion.full) ) // set settings specific js project .jsconfigure(_ enableplugins scalajsplay) lazy val sharedjvm = shared.jvm.settings(name := "sharedjvm") lazy val sharedjs = shared.js.settings(name := "sharedjs") lazy val root = (project in file(".")).settings( scalaversion := scalav, scalajsprojects := jsprojects, pipelinestages := seq(scalajsprod, gzip), routesgenerator := injectedroutesgenerator, scalikejdbcsettings, librarydependencies ++= seq( jdbc, cache, ws, evolutions, "org.scalatestplus.play" %% "scalatestplus-play" % "1.5.1" % test, "mysql" % "mysql-connector-java" % "5.1.39", "com.vmunier" % "play-scalajs-scripts_2.11" % "0.5.0" ), resolvers += "scalaz-bintray" @ "http://dl.bintray.com/scalaz/releases" ). enableplugins(playscala). aggregate(jsprojects.map(projecttoref): _*) lazy val jsprojects = seq(js) lazy val js = (project in file("client")).settings( scalaversion := scalav, persistlauncher := true, persistlauncher in test := false, autocompilerplugins := true, scalacoptions ++= seq("-unchecked", "-deprecation", "-feature"), librarydependencies ++= seq( "org.scala-js" %%% "scalajs-dom" % "0.9.0", "com.mediamath" %%% "scala-json" % "1.0" ), resolvers += "mmreleases" @ "https://artifactory.mediamath.com/artifactory/libs-release-global", resolvers += resolver.sonatyperepo("releases"), addcompilerplugin("org.scalamacros" % "paradise" % "2.1.0" cross crossversion.full) ).enableplugins(scalajsplugin, scalajsplay)
everything working fine problem is: can't import shared project in scala.js , play framework project. here how shared project structure looks:
and here how i'm trying import it:
import services.encryptor
at compile time got error:
not found: object services [error] import services.encryptor
how issue can fixed?
first of all, never ever (!) this:
lazy val sharedjvm = shared.jvm.settings(name := "sharedjvm") lazy val sharedjs = shared.js.settings(name := "sharedjs")
this creates new projects picked sbt, cross project not hold right projects anymore. see docs details.
instead, use jssettings
, jvmsettings
:
(crossproject.crosstype(crosstype.pure) in file("shared")) // snip .jssettings(name := "sharedjs") .jvmsettings(name := "sharedjvm") lazy val sharedjvm = shared.jvm lazy val sharedjs = shared.js
in build, seems js
project not depend on shared project. if course shared project's contents not available.
you need to
lazy val js = (project in file("client")) // snip .dependson(shared.js)
Comments
Post a Comment