2016-08-08 13 views
0

私はフロントエンドと1つの共有プロジェクトで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に共有プロジェクトから何かをインポートし、Frameworkプロジェクトを再生することはできません。ここに私の共有プロジェクトの構造がどのように見えるかです:私はエラーを得た

import services.Encryptor 

コンパイル時: enter image description here

そして、ここでは、私はそれをインポートしようとしている方法です

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

どのようにこの問題は修正できますか? (!):

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

これは、SBTによってピックアップされている新しいプロジェクトを作成し、そのクロスプロジェクトはもう右のプロジェクトを保持していない

+0

うーんする必要があります。私はPureの専門家ではありません(私はCrossType.Fullを使用しています)。しかし、そのディレクトリ構造は私にとって奇妙に見えます。私の経験上、共有ディレクトリはJSとJVMのものであり、 ... –

答えて

1

まず、決しては、これを行います。詳細は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 sharedJS =( "sharedJVM") lazy val sharedJS = shared.js.settings(name:= "sharedJS ")コンパイル時にエラーが発生しました:プロジェクトがありません 'sharedJVM' – user2975535

+0

私は自分の返信を明確にしました。ドキュメントをお読みください。 CrossProjectは、sbtコアインフラストラクチャの上にある小さな層です。あなたが何をしているのか分からなければ、それから何も良いことは起こりません。 – gzm0

関連する問題