playframework - Can't import from CrossType.Pure sbt project in Scala -


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: enter image description here

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