2013-03-24 60 views
1

https://github.com/jasongoodwin/play21-multimodule-demo有代碼。 我已經在3個不同的項目上重新創建了這個問題。我不知道發生了什麼。 一旦你在build.scala文件中放入聚合和dependsOn,項目在嘗試開始播放時會引發錯誤。播放項目中的簡單SBT模塊導致播放崩潰原因不明 - 播放2.1

從/Users/jgoodwin/.sbt/plugins [信息] 加載項目定義

[信息]加載全局插件從 /用戶/ jgoodwin /開發/ src目錄/ ninjakeyboard /測試/ tmp目錄/ play21-multimodule- demo/project [error] java.lang.ExceptionInInitializerError [error]使用'last'作爲完整日誌的 。項目加載失敗:(r)etry,(q)uit,(l)ast或 (i)gnore? q

生成文件

進口sbt._進口Keys._進口play.Project._

對象ApplicationBuild延伸構建{

VAL APPNAME = 「多模塊-演示」 val appVersion = 「1.0-SNAPSHOT」// val scalaVersion =「2.10.0」

val appDependencies = Seq( //添加您的項目依賴這裏, JDBC, ANORM)

VAL buildSettings =( scalaVersion:= 「2.10.0」 )

VAL主要= play.Project(應用程序名稱,appVersion,appDependencies ,路徑= 文件( 「網絡」))。設置( //添加您自己的項目設置在這裏).aggregate(testmodule).dependsOn(testmodule)

VAL testmodule =項目( 「testmodule」, 文件(「testmodlue」), 設置= buildSettings)

}

+0

由於開放變量太多,可能需要更多信息。它可能歸結爲不可用,目標和運行時SBT版本之間存在衝突。你可以在加載過程中獲得完整的日誌嗎? – crockpotveggies 2013-03-25 19:19:19

+0

與應用程序的github存儲庫在那裏 - 你可以檢查出來並嘗試。太多的變量讓我提供比實際代碼本身更有用的東西。 – JasonG 2013-03-25 19:32:34

+0

嗯...在這一點上,我可能會建議複製一個現有的模塊,並將其用作「模板」。然後做一個DIFF,看看你是否錯過了任何東西。對整個回購進行篩選有很多工作 – crockpotveggies 2013-03-25 20:19:20

回答

1

嘗試創建一個新的項目:

  1. 運行命令:play new MyApp
  2. 運行play clean eclipse
  3. 讓DIR 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年3月27日

改變上述配置,真正的分項目設置,請按照下列步驟操作:MyApp的

  1. 運行:play clean
  2. 變化MyApp的的生成。 scala文件:

對象ApplicationBuild extends 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

就是這樣,你不能訪問的相同網址如上所述。 這可能是因爲你的想法不能識別你的子項目中的類,只要將MyModule項目引用爲主項目的引用庫,那麼你就很好。

祝你好運!

+0

我會試試這個。請注意,您仍然沒有像文檔那樣在其他文件夾中播放項目:http://www.playframework.com/documentation/2.1.0/SBTSubProjects 請參閱第一個代碼示例。 – JasonG 2013-03-28 02:12:59

+0

不知道這是一個intellij唯一的問題,因爲我使用它的最終許可證,但我不這麼認爲。 – JasonG 2013-03-28 02:13:54

+0

是的,你可以把這個例子(有兩個Play項目),並使其工作,然後嘗試轉換或添加一個'常規'SBT項目。我只與Play項目合作過。祝你好運,請告訴我們你的進展。 – adis 2013-03-28 07:59:22

3

我注意到你的github build.scala testmodule是在主模塊之後聲明(和初始化)的,因此在項目加載期間是null異常。 我犯了同樣的錯誤,並以正確的順序放置模塊使其工作。 我剛開始玩Play2和Scala,但我相信懶惰val的使用也可以幫助。

+0

謝謝 - 我會檢查出來並嘗試。這是一個很好的信息堆棧。 – JasonG 2013-06-18 13:44:37

+0

我證明在non-play sbt項目中遇到了相同的java.lang.ExceptionInInitializerError。通過首先放置依賴任務來解決它(最初是錯誤的順序,我認爲沒關係)。 – dmitry 2014-05-29 11:36:19