2016-08-08 4 views
0

Я пытаюсь создать проект фреймворка Play с Scala.js на frontend и один совместный проект. Моя конфигурация SBT является:Невозможно импортировать из проекта CrossType.Pure sbt в Scala

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" at "https://artifactory.mediamath.com/artifactory/libs-release-global", 
    addCompilerPlugin("org.scalamacros" % "paradise" % "2.1.0" cross CrossVersion.full) 
) 
    // set up settings specific to the 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" at "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" at "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) 

Все работает нормально, но проблема: я ничего не могу импортировать из общего проекта в Scala.js и играть в рамках проекта. Вот как моя общая структура проекта выглядит: enter image description here

А вот как я пытаюсь импортировать:

import services.Encryptor 

Во время компиляции я получил ошибку:

not found: object services [error] import services.Encryptor

Как это вопрос может быть исправлен?

+0

Хм. Я не эксперт в Pure (я использую CrossType.Full самостоятельно), но эта структура каталогов выглядит странно для меня - по моему опыту, общий каталог обычно представляет собой * peer * JS и JVM, а не их контейнер ... –

ответ

1

Прежде всего, никогда никогда сделать это (!):

lazy val sharedJVM = shared.jvm.settings(name := "sharedJVM") 
lazy val sharedJS = shared.js.settings(name := "sharedJS") 

Это создает новые проекты, которые подбираются SBT, поэтому крест проект не больше не занимать правильные проекты. См. docs.

Вместо этого используйте 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 

В вашей сборке, кажется, что ваш проект js не зависит от общего проекта. Поэтому, если курс содержания совместного проекта недоступен.

Вам нужно к

lazy val js = (project in file("client")) 
    // snip 
    .dependsOn(shared.js) 
+0

Вы правильно ответили на мой вопрос, но когда я удалил эту часть: lazy val sharedJVM = shared.jvm.settings (name: = "sharedJVM") lazy val sharedJS = shared.js.settings (name: = "sharedJS «) У меня ошибка во время компиляции: ни один проект« sharedJVM » – user2975535

+0

Я уточнил свой ответ. Пожалуйста, прочитайте документы. CrossProject - это всего лишь крошечный слой поверх базовой инфраструктуры sbt. Если вы не понимаете, что он делает, из этого ничего хорошего не выйдет. – gzm0

Смежные вопросы