2016-08-08 2 views
0

프론트 엔드 및 하나의 공유 프로젝트에서 Scala.js로 Play 프레임 워크 프로젝트를 만들려고합니다. 내 SBT의 구성은 다음과 같습니다Scala에서 CrossType.Pure sbt 프로젝트를 가져올 수 없습니다.

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을 사용한다.)의 전문가는 아니지만 그 디렉토리 구조는 나에게 이상하게 보였다. 나의 경험에 의하면, 공유 디렉토리는 대개 JS와 JVM에 대한 것이지 컨테이너가 아니다. ... –

답변

1

첫째, 결코 이제까지이 할 (!) :

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

이 SBT에 의해 포착되는 새로운 프로젝트를 생성, 그래서 십자가 프로젝트가 더 이상 올바른 프로젝트를 보유하지 않습니다. 자세한 내용은 docs을 참조하십시오.

는 대신, jsSettingsjvmSettings 사용 빌드에서

(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

관련 문제