1

https://github.com/jasongoodwin/play21-multimodule-demo有代码。我已经在 3 个不同的项目中重现了这个问题。我不知道怎么了。一旦将聚合和dependsOn 放入build.scala 文件中,项目在尝试开始播放时会引发错误。

[信息] 从 /Users/jgoodwin/.sbt/plugins 加载全局插件 [信息] 从 /Users/jgoodwin/Development/src/ninjakeyboard/test/tmp/play21-multimodule-demo/project 加载项目定义 [错误] java. lang.ExceptionInInitializerError [错误] 使用“最后一个”作为完整日志。项目加载失败:(r)etry、(q)uit、(l)ast 还是 (i)gnore?q

构建文件

导入 sbt._ 导入 Keys._ 导入 play.Project._

对象应用程序构建扩展构建{

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 = file("web")).settings( // 在这里添加你自己的项目设置 ).aggregate(testmodule).dependsOn(testmodule)

val testmodule = Project("testmodule", file("testmodlue"), settings = buildSettings)

}

4

2 回答 2

3

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

于 2013-06-15T08:31:19.840 回答
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

瞧,你有你的子模块,见我的 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 文件:

对象应用程序构建扩展构建{

  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

就是这样,您无法访问与上述相同的网址。可能是您的想法无法识别子项目中的类,只需将 MyModule 项目引用为主项目的引用库,您就可以开始了。

祝你好运!

于 2013-03-27T22:21:38.460 回答