播放项目中的简单SBT模块导致播放崩溃的原因不明 - 播放2.1

时间:2013-03-24 01:19:08

标签: scala playframework playframework-2.0 sbt

https://github.com/jasongoodwin/play21-multimodule-demo有代码。 我在3个不同的项目中重新创建了这个问题。我不知道发生了什么事。 一旦你将aggregate和dependsOn放在build.scala文件中,项目在尝试开始播放时就会抛出错误。

  

[info]从/Users/jgoodwin/.sbt/plugins [info]加载全局插件   从中加载项目定义   /用户/ jgoodwin /开发/ src目录/ ninjakeyboard /测试/ tmp目录/ play21,多模块,演示/项目   [error] java.lang.ExceptionInInitializerError [error]使用'last'表示   完整的日志。项目加载失败:(r)etry,(q)uit,(l)ast,或   (忽视? q

构建文件

  

import sbt._ import Keys._ import play.Project ._

     

对象ApplicationBuild扩展Build {

     

val appName =“multimodule-demo”val appVersion =   “1.0-SNAPSHOT”// val scalaVersion =“2.10.0”

     

val appDependencies = Seq(       //在这里添加项目依赖项,       JDBC,       anorm)

     

val buildSettings =(         scalaVersion:=“2.10.0”       )

     

val main = play.Project(appName,appVersion,appDependencies,path =   文件( “网”))。设置(       //在这里添加你自己的项目设置).aggregate(testmodule).dependsOn(testmodule)

     

val testmodule = Project(       “testmodule”       文件( “testmodlue”),       settings = buildSettings)

     

}

2 个答案:

答案 0 :(得分:3)

我在你的github build.scala中注意到,在主模块之后声明(并初始化)了testmodule,因此在项目加载期间出现了null异常。 我犯了同样的错误,按正确的顺序放置模块使其工作。 我刚刚开始玩Play2和Scala,但我相信使用懒惰的val也可以帮助。

答案 1 :(得分:1)

尝试创建一个新项目:

  1. 运行命令:play new MyApp
  2. 运行play clean eclipse
  3. 制作目录modules(在MyApp内)
  4. 运行命令play new MyModule
  5. 运行命令play clean eclipse
  6. 将控制器重命名为MyModuleCon,并更改路径文件
  7. 运行命令play clean publish-local
  8. 向MyApp Build.scala添加依赖项:"mymodule" % "mymodule_2.10" % "1.0-SNAPSHOT"
  9. 将主要路线重命名为app.routes(因为模块也有路线,但可以删除!)
  10. 在主项目运行中:play dependencies eclipse
  11. 瞧,你有你的子模块,请参阅我的github:https://github.com/adis-me/PlayModuleExample

    只需运行play run并访问主要项目:http://localhost:9000,然后访问子模块:http://localhost:9000/module

    对于你,我认为这应该可以解决问题!

    编辑:2013-03-27

    将上述配置更改为实际子项目设置,请按照下列步骤操作:

    1. 在MyApp上运行:play clean
    2. 更改MyApp的Build.scala文件:
    3. 对象ApplicationBuild扩展Build {

        val appName         = "MyAppp"
        val appVersion      = "1.0-SNAPSHOT"
      
        val appDependencies = Seq(
          // Add your project dependencies here,
          javaCore,
          javaJdbc,
          javaEbean
        )
      
        val subproject = play.Project(
          "sub-project", appVersion, appDependencies, path = file("modules/MyModule")
        )
      
        val main = play.Project(appName, appVersion, appDependencies).settings(
          // Add your own project settings here      
        ).dependsOn(subproject).aggregate(subproject)
      
      }
      
      1. 运行命令:play clean eclipse
      2. 运行命令:play run
      3. 就是这样,你不能访问上面提到的相同网址。 可能是您的想法无法识别子项目中的类,只需将MyModule项目作为主项目的引用库引用,您就可以了。

        祝你好运!