Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala PlayRunHook不适用于多模块项目_Scala_Playframework_Sbt_Playframework 2.4_Multi Module - Fatal编程技术网

Scala PlayRunHook不适用于多模块项目

Scala PlayRunHook不适用于多模块项目,scala,playframework,sbt,playframework-2.4,multi-module,Scala,Playframework,Sbt,Playframework 2.4,Multi Module,我们需要一个基本的play框架项目,其中包含其他play和scala项目作为模块。这些内部独立的项目可以有不同的javascript框架,并构建webpack、gulp等系统 所以我试了一下我的PlayRunHook。单项目挂钩按预期工作。但是,无法在多模块项目中正确使用它。一些代码示例 项目结构 base/build.sbt 基本/模块/刮刀/构建.sbt base/modules/scraper/project/WebPack.scala 但是我越来越 我正在试验play框架,对此我是相当

我们需要一个基本的play框架项目,其中包含其他play和scala项目作为模块。这些内部独立的项目可以有不同的javascript框架,并构建webpack、gulp等系统

所以我试了一下我的PlayRunHook。单项目挂钩按预期工作。但是,无法在多模块项目中正确使用它。一些代码示例

项目结构

base/build.sbt 基本/模块/刮刀/构建.sbt base/modules/scraper/project/WebPack.scala 但是我越来越 我正在试验play框架,对此我是相当陌生的。提前谢谢

  • 在sbt中,只保留一个
    build.sbt
    文件和一个
    project
    目录(带有*.sbt和*.scala配置文件)
  • WebPack.scala
    复制到
    project
    目录
  • 将根项目移动到子项目(基本)
  • 重写build.sbt
  • import play.sbt.PlayImport.PlayKeys.playRunHooks
    名称:=“根”
    版本:=“1.0-快照”
    val scraperDir=“模块/刮板”
    val sliderDir=“模块/滑块”
    lazy val commonSettings=序列(
    scalaVersion:=“2.11.7”,
    libraryDependencies++=Seq(
    jdbc,
    隐藏物
    ws,
    规格2%试验
    ),
    分解器+++=Seq(
    “scalaz bintray”位于http://dl.bintray.com/scalaz/releases"
    )
    )
    lazy val base=projectName(“base”、“base”)。设置(
    playRunHooks+=WebPack.apply(文件(scraperDir))
    )
    .dependsOn(刮刀、滑块)
    lazy val scraper=projectName(“scraper”,scraperDir)。设置(
    libraryDependencies++=Seq(
    “com.corundumstudio.socketio”%“netty socketio”%“1.7.8”
    ),
    分解器+++=Seq(
    “Sonatype OSS快照”位于https://oss.sonatype.org/content/repositories/snapshots")
    )
    lazy val slider=projectName(“slider”,sliderDir)
    def projectName(名称:字符串,路径:字符串):项目=
    项目(名称、文件(路径))
    .设置(
    共同设定,
    routesGenerator:=InjectedRoutesGenerator
    )
    .enablePlugins(PlayScala)
    
    name := """base"""
    
    version := "1.0-SNAPSHOT"
    
    lazy val commonSettings = Seq(
      scalaVersion := "2.11.6",
      libraryDependencies ++= Seq(
        jdbc,
        cache,
        ws,
        specs2 % Test
      ),
      resolvers ++= Seq(
        "scalaz-bintray" at "http://dl.bintray.com/scalaz/releases"
      )
    )
    
    lazy val root = (project in file("."))
            .settings(commonSettings : _*)
            .enablePlugins(PlayScala)
            .dependsOn(scraper)
            .aggregate(scraper)
            .dependsOn(slider)
            .aggregate(slider)
    
    lazy val scraper = (project in file("modules/scraper"))
            .settings(commonSettings : _*)
            .enablePlugins(PlayScala)
    
    lazy val slider = (project in file("modules/slider"))
            .settings(commonSettings : _*)
            .enablePlugins(PlayScala)
    
    routesGenerator := InjectedRoutesGenerator
    
    import play.sbt.PlayImport.PlayKeys.playRunHooks
    import WebPack._
    
    name := """scraper"""
    
    version := "1.0-SNAPSHOT"
    
    lazy val frontendDirectory = baseDirectory {_ / "frontend"}
    
    playRunHooks <+= frontendDirectory.map(WebPack.apply)
    
    routesGenerator := InjectedRoutesGenerator
    
    libraryDependencies ++= Seq(
        "com.corundumstudio.socketio" % "netty-socketio" % "1.7.8"
    )
    
    resolvers ++= Seq(
        "Sonatype OSS Snapshots" at "https://oss.sonatype.org/content/repositories/snapshots"
    )
    
    name := """slider"""
    
    version := "1.0-SNAPSHOT"
    
    scalaVersion := "2.11.6"
    
    routesGenerator := InjectedRoutesGenerator
    
    import java.net.InetSocketAddress
    
    import play.sbt.PlayRunHook
    import sbt._
    
    object WebPack {
        def apply(base: File): PlayRunHook = {
            object WebpackHook extends PlayRunHook {
                var process: Option[Process] = None
    
                override def beforeStarted(): Unit = {
                    if (isWindows) {
                        Process("cmd /c npm run compile", base).run
                    } else {
                        Process("npm run compile", base).run
                    }
                }
    
                override def afterStarted(addr: InetSocketAddress): Unit = {
                    if (isWindows) {
                        Some(Process("cmd /c npm start", base).run)
                    } else {
                        Some(Process("npm start", base).run)
                    }
                }
    
                private def isWindows: Boolean = {
                    System.getProperty("os.name").startsWith("Windows")
                }
    
                override def afterStopped(): Unit = {
                    process.foreach(_.destroy())
                    process = None
                }
            }
    
            WebpackHook
        }
    }
    
    ...../base/modules/scraper/build.sbt:10: error: not found: object WebPack
    import WebPack._
           ^
    sbt.compiler.EvalException: Type error in expression
            at sbt.compiler.Eval.checkError(Eval.scala:384)
            at sbt.compiler.Eval.compileAndLoad(Eval.scala:183)
            at sbt.compiler.Eval.evalCommon(Eval.scala:152)
            at sbt.compiler.Eval.evalDefinitions(Eval.scala:122)
            at sbt.EvaluateConfigurations$.evaluateDefinitions(EvaluateConfigurations.scala:271)
            at sbt.EvaluateConfigurations$.evaluateSbtFile(EvaluateConfigurations.scala:109)
            at sbt.Load$.sbt$Load$$loadSettingsFile$1(Load.scala:712)
            at sbt.Load$$anonfun$sbt$Load$$memoLoadSettingsFile$1$1.apply(Load.scala:717)
            at sbt.Load$$anonfun$sbt$Load$$memoLoadSettingsFile$1$1.apply(Load.scala:716)
            at scala.collection.MapLike$class.getOrElse(MapLike.scala:128)
            at scala.collection.AbstractMap.getOrElse(Map.scala:58)
            at sbt.Load$.sbt$Load$$memoLoadSettingsFile$1(Load.scala:716)
            at sbt.Load$$anonfun$loadFiles$1$2.apply(Load.scala:723)
            at sbt.Load$$anonfun$loadFiles$1$2.apply(Load.scala:723)
            at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244)
            at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244)
            at scala.collection.immutable.List.foreach(List.scala:318)
            at scala.collection.TraversableLike$class.map(TraversableLike.scala:244)
            at scala.collection.AbstractTraversable.map(Traversable.scala:105)
            at sbt.Load$.loadFiles$1(Load.scala:723)
            at sbt.Load$.discoverProjects(Load.scala:734)
            at sbt.Load$.discover$1(Load.scala:545)
            at sbt.Load$.discoverAndLoad$1(Load.scala:554)
            at sbt.Load$.loadTransitive(Load.scala:570)
            at sbt.Load$.loadProjects$1(Load.scala:442)
            at sbt.Load$.loadUnit(Load.scala:446)
            at sbt.Load$$anonfun$18$$anonfun$apply$11.apply(Load.scala:281)
            at sbt.Load$$anonfun$18$$anonfun$apply$11.apply(Load.scala:281)
            at sbt.BuildLoader$$anonfun$componentLoader$1$$anonfun$apply$4$$anonfun$apply$5$$anonfun$apply$6.apply(BuildLoader.scala:91)
            at sbt.BuildLoader$$anonfun$componentLoader$1$$anonfun$apply$4$$anonfun$apply$5$$anonfun$apply$6.apply(BuildLoader.scala:90)
            at sbt.BuildLoader.apply(BuildLoader.scala:140)
            at sbt.Load$.loadAll(Load.scala:334)
            at sbt.Load$.loadURI(Load.scala:289)
            at sbt.Load$.load(Load.scala:285)
            at sbt.Load$.load(Load.scala:276)
            at sbt.Load$.apply(Load.scala:130)
            at sbt.Load$.defaultLoad(Load.scala:36)
            at sbt.BuiltinCommands$.doLoadProject(Main.scala:481)
            at sbt.BuiltinCommands$$anonfun$loadProjectImpl$2.apply(Main.scala:475)
            at sbt.BuiltinCommands$$anonfun$loadProjectImpl$2.apply(Main.scala:475)
            at sbt.Command$$anonfun$applyEffect$1$$anonfun$apply$2.apply(Command.scala:58)
            at sbt.Command$$anonfun$applyEffect$1$$anonfun$apply$2.apply(Command.scala:58)
            at sbt.Command$$anonfun$applyEffect$2$$anonfun$apply$3.apply(Command.scala:60)
            at sbt.Command$$anonfun$applyEffect$2$$anonfun$apply$3.apply(Command.scala:60)
            at sbt.Command$.process(Command.scala:92)
            at sbt.MainLoop$$anonfun$1$$anonfun$apply$1.apply(MainLoop.scala:98)
            at sbt.MainLoop$$anonfun$1$$anonfun$apply$1.apply(MainLoop.scala:98)
            at sbt.State$$anon$1.process(State.scala:184)
            at sbt.MainLoop$$anonfun$1.apply(MainLoop.scala:98)
            at sbt.MainLoop$$anonfun$1.apply(MainLoop.scala:98)
            at sbt.ErrorHandling$.wideConvert(ErrorHandling.scala:17)
            at sbt.MainLoop$.next(MainLoop.scala:98)
            at sbt.MainLoop$.run(MainLoop.scala:91)
            at sbt.MainLoop$$anonfun$runWithNewLog$1.apply(MainLoop.scala:70)
            at sbt.MainLoop$$anonfun$runWithNewLog$1.apply(MainLoop.scala:65)
            at sbt.Using.apply(Using.scala:24)
            at sbt.MainLoop$.runWithNewLog(MainLoop.scala:65)
            at sbt.MainLoop$.runAndClearLast(MainLoop.scala:48)
            at sbt.MainLoop$.runLoggedLoop(MainLoop.scala:32)
            at sbt.MainLoop$.runLogged(MainLoop.scala:24)
            at sbt.StandardMain$.runManaged(Main.scala:53)
            at sbt.xMain.run(Main.scala:28)
            at xsbt.boot.Launch$$anonfun$run$1.apply(Launch.scala:109)
            at xsbt.boot.Launch$.withContextLoader(Launch.scala:128)
            at xsbt.boot.Launch$.run(Launch.scala:109)
            at xsbt.boot.Launch$$anonfun$apply$1.apply(Launch.scala:35)
            at xsbt.boot.Launch$.launch(Launch.scala:117)
            at xsbt.boot.Launch$.apply(Launch.scala:18)
            at xsbt.boot.Boot$.runImpl(Boot.scala:41)
            at xsbt.boot.Boot$.main(Boot.scala:17)
            at xsbt.boot.Boot.main(Boot.scala)
    [error] sbt.compiler.EvalException: Type error in expression
    [error] Use 'last' for the full log.
    Project loading failed: (r)etry, (q)uit, (l)ast, or (i)gnore?