2013-04-22 50 views
2

我正在嘗試構建使用相同的核心功能使用播放框架2(JAVA)的2個網站。面臨的挑戰是如何建立項目,以便在兩個項目之間共享核心部分。在遊戲1中,我們可以有一個通用模塊並通過應用程序將其集中,但是我找不到使用play 2執行此操作的方法。我明白可以創建模塊目錄並將核心代碼放在那裏,但這不會是這對我來說是一個理想的解決方案,因爲模塊中的代碼需要與多個項目共享。任何人有任何想法如何解決這個問題?如何共享播放框架2中的模塊

到目前爲止,我試圖通過創建一個項目與3個模塊,其中一個核心模塊和其他的網站來解決這個問題。

-mainProject 
     -modules 
      -core 
      -website1 
      -website2 

但問題是我無法從其他模塊中的代碼調用核心中的函數。加上不方便我保留多個構建文件和路由文件,並根據我想建立什麼網站,我重命名他們。

請注意,核心需要在控制器中擁有自己的路由和操作。

感謝

回答

1

我不認爲播放了多模塊支持內置權,但你也許可以破解一起玩的頂部使用Maven的解決方案。

你可以做什麼來做3個不同的Play項目,Core,Website1和Website2各一個。既然你需要「導出」核心項目,你可以使用Maven來做到這一點。

在Core項目中,您將創建一個pom.xml(Maven構建文件),該文件可以是package the Core project as a JAR。然後運行mvn install:install將核心JAR安裝到本地存儲庫中,然後可以在其他網站項目中使用該JAR。 (側面說明,有一個Maven-Play bridge here,你可能會發現有用)

現在,在WEBSITE1和WEBSITE2播放項目,你會在你的Build.scala文件中添加dependency這個JAR。你把它添加到appDependencies

val appDependencies = Seq(
    "your-core-project-artifact-name" % "your-core-project-project-name" % "1.0.0.0", 
    "javax.mail" % "mail" % "1.4" // Existing libraries 
) 

最後,加入你的本地庫(正在安裝的核心項目)爲您的WEBSITE1一個解析器和WEBSITE2項目

resolvers += (
    "Local Maven Repository" at "file://"+Path.userHome.absolutePath+"/.m2/repository" 
) 

有你有它。當你建立你的Website1/Website2項目時,Play應該添加依賴到你的Core項目,並且你將能夠從你的網站項目中調用你的Core項目的方法

+0

這在概念上是關於事物的方式if你有一個完整的Play項目,你想在其他網站上重複使用。但是你不必介紹Maven。您可以從'core'運行'publish-local'任務將其發佈到您的本地Play存儲庫。然後,您可以將其列爲上述網站項目中的依賴項,而無需添加其他存儲庫。 – avik 2013-04-28 08:55:11

+0

作爲後續評論,我曾嘗試過這樣做,但沒有成功。我遇到的問題是加載路由文件。通過這個設置,你有一個帶有'routes'文件的主要網站應用程序,以及一個帶有另一個'routes'文件的核心JAR。我發現我的核心路線將在啓動我的網站項目時勝過我的網站路線,因此將成爲我網站唯一可用的路線。然而,我當時在Play 2.0中工作,在Play 2.1中有可能解決這個問題。 – avik 2013-04-28 09:03:06

+0

@avik,謝謝,在你提出的解決方案中,這個模塊應該是一個完全獨立的播放模塊,或者它會在項目內的模塊目錄下運行? – nightograph 2013-04-28 20:24:25