编写Play 2的模块,第1部分:使工作正常
重要的是要注意,這不是權(quán)威指南,而是我在處理自己的模塊時(shí)所使用的信息和技術(shù)的集合。
我將假設(shè)您已經(jīng)安裝了Play 2,如果沒(méi)有,請(qǐng)直接訪問(wèn)http://www.playframework.org/documentation/2.0/Installing ,以獲取有關(guān)如何進(jìn)行設(shè)置的詳細(xì)信息。
在第一部分中,我們將介紹創(chuàng)建和發(fā)布模塊以及添加示例應(yīng)用程序的基礎(chǔ)知識(shí)。 接下來(lái)的兩部分將更深入地介紹插件,攔截器,標(biāo)簽和其他有用的工具。
首先,簡(jiǎn)要介紹一下模塊和庫(kù)之間的區(qū)別。 在Play 1.x中,使用“ play new-module”創(chuàng)建了一個(gè)模塊,并通過(guò)模塊存儲(chǔ)庫(kù)進(jìn)行分發(fā)。 在Play 1.1之前,模塊都是通過(guò)application.conf條目控制的,并且?guī)焓窃诒镜靥砑拥摹?從Play 1.2開(kāi)始,模塊和庫(kù)都通過(guò)基于Ivy的依賴關(guān)系管理機(jī)制進(jìn)行控制。 不過(guò),在這兩種情況下,都有一個(gè)明確的模塊概念(與Play緊密集成,遵循Play的封裝結(jié)構(gòu)等約定)和一個(gè)庫(kù)(一個(gè)通用的第三方庫(kù))。
在播放2中,線條模糊到一定程度。 現(xiàn)在,通過(guò)Ivy或Maven,模塊以與庫(kù)相同的方式分發(fā),并且包結(jié)構(gòu)可以是任意的,因此您可以擁有傳統(tǒng)的com.example.whatever結(jié)構(gòu)。 從這個(gè)角度來(lái)看,模塊和庫(kù)之間的唯一真正區(qū)別是模塊直接使用Play API。
其次,關(guān)于語(yǔ)言的說(shuō)明。 由于Play 2本身支持Java和Scala,因此您可以使用任何一種語(yǔ)言來(lái)實(shí)現(xiàn)模塊。 如果模塊具有自己的應(yīng)用程序可以使用的API,則Java和Scala之間的出色互操作性意味著-在大多數(shù)情況下,您所選擇的語(yǔ)言與使用API??的應(yīng)用程序無(wú)關(guān)。
1.入門(mén)
作為簡(jiǎn)單的介紹,我們將創(chuàng)建一個(gè)基本的日志記錄模塊,該模塊遵循行業(yè)最佳實(shí)踐,將輸出寫(xiě)入控制臺(tái)窗口。 這個(gè)模塊稱為mylogger,因?yàn)樗切瞧谝?#xff0c;而我現(xiàn)在并不覺(jué)得很有創(chuàng)意。 該模塊(主要)將用Java編寫(xiě)。
您可以將Play 2模塊視為是Play 2應(yīng)用程序,其中缺少一些文件。 因此,您可以按照與應(yīng)用程序相同的方式來(lái)創(chuàng)建模塊。 轉(zhuǎn)到或創(chuàng)建用于保存項(xiàng)目的目錄,然后使用“播放新的Mylogger”創(chuàng)建應(yīng)用。 出現(xiàn)提示時(shí)選擇選項(xiàng)2,以創(chuàng)建一個(gè)簡(jiǎn)單的Java應(yīng)用程序。
steve@hex:/tmp$ play new mylogger_ __ __ | | __ _ _ _| | | '_ \| |/ _' | || |_| | __/|_|\____|\__ (_) |_| |__/play! 2.0, http://www.playframework.orgThe new application will be created in /tmp/myloggerWhat is the application name? > myloggerWhich template do you want to use for this new application?1 - Create a simple Scala application2 - Create a simple Java application3 - Create an empty project> 2OK, application mylogger is created.Have fun!因?yàn)槲覀儗⒃谀K旁邊有一個(gè)示例應(yīng)用程序,所以我們將稍微更改目錄結(jié)構(gòu)。 目前,它看起來(lái)像這樣:
mylogger – app – conf – project – public – target – .gitignore – README在mylogger目錄中,創(chuàng)建兩個(gè)新目錄,項(xiàng)目代碼和示例。 將上面列出的所有文件復(fù)制到項(xiàng)目代碼目錄中。 您現(xiàn)在應(yīng)該擁有
mylogger – samples – project-code– app– conf– project– public– target– .gitignore– READMEconf目錄包含兩個(gè)文件-路由和application.conf。
– Play必須存在application.conf才能將mylogger /項(xiàng)目代碼識(shí)別為Play應(yīng)用程序,因此我們無(wú)法刪除它,但可以刪除其中包含的所有內(nèi)容。 模塊需要的任何配置都應(yīng)添加到“實(shí)際”應(yīng)用程序的application.conf中。
–必須刪除路由*。 如果您不這樣做,它可能/將取代使用該應(yīng)用程序的任何應(yīng)用程序的路由文件,這是一件不好的事情(主要是因?yàn)槭裁炊疾黄鹱饔?#xff09;。
清空application.conf并刪除路由后,在項(xiàng)目代碼中鍵入“ play”以啟動(dòng)Play控制臺(tái)。
steve@hex:/tmp/mylogger/project-code$ play [info] Loading project definition from /tmp/mylogger/project-code/project [info] Set current project to mylogger (in build file://tmp/mylogger/project-code/)_ __ __ | | __ _ _ _| | | '_ \| |/ _' | || |_| | __/|_|\____|\__ (_) |_| |__/play! 2.0, http://www.playframework.org> Type "help play" or "license" for more information. > Type "exit" or use Ctrl+D to leave this console.[mylogger] $現(xiàn)在,我們有了一個(gè)有效的Play 2模塊(請(qǐng)注意,它什么也不做)。
如果您使用的是IDE,那么現(xiàn)在是創(chuàng)建項(xiàng)目的好時(shí)機(jī)-本教程與IDE無(wú)關(guān),因此,如果需要,您可以使用位于http://www.playframework.org/documentation/2.0/IDE的指南。去做這個(gè)。
2.添加一些功能
如上所述,Play 2模塊可以具有更傳統(tǒng)的com.example.package包結(jié)構(gòu),但是默認(rèn)的Play應(yīng)用程序具有傳統(tǒng)的app / controllers,app / models等結(jié)構(gòu)。 我們現(xiàn)在將其保留,并在本教程的后面部分進(jìn)行更改。
2.1刀耕火種
在app文件夾中,我們具有“ play new”命令為我們創(chuàng)建的以下結(jié)構(gòu):
app – controllers– Application.java – views– index.scala.html– main.scala.html對(duì)于此模塊的初始迭代,我們不需要任何視圖,因此您可以刪除視圖包。
您也可以刪除Application.java,因?yàn)槲覀兪菑念^開(kāi)始編寫(xiě)的。
2.2添加一些模塊代碼
在controllers包中,創(chuàng)建一個(gè)名為MyLogger.java的新類。 它不需要擴(kuò)展或?qū)崿F(xiàn)任何東西,它包含一個(gè)方法:
package controllers;/*** @author Steve Chaloner*/ public class MyLogger {public static void log(String message){System.out.println("MyLogger: " + message);} }2.3喝啤酒
您剛剛編寫(xiě)了一個(gè)模塊。 去喝啤酒。
2.4啤酒后實(shí)現(xiàn)
當(dāng)您凝視著現(xiàn)在空蕩蕩的杯子,充滿創(chuàng)造力的喜悅和即將來(lái)臨的行業(yè)聲譽(yù)時(shí),您可能會(huì)意識(shí)到,實(shí)際上沒(méi)有人能夠進(jìn)入您的模塊,因?yàn)樗挥谀挠?jì)算機(jī)上。 您需要發(fā)布它。
3.發(fā)布并受到譴責(zé)
對(duì)于此示例,我們將要發(fā)布到您的本地存儲(chǔ)庫(kù)。 在Play安裝的根目錄中,有一個(gè)存儲(chǔ)庫(kù)目錄,這是您首先推送模塊的位置。
發(fā)布之前,請(qǐng)始終確保已運(yùn)行“干凈”,否則,從源樹(shù)中刪除的某些類/文件可能仍以編譯形式存在,并最終出現(xiàn)在模塊jar文件中。 如果該類與您實(shí)際應(yīng)用程序中的類匹配,則可以在您的實(shí)際類中代替它。 真爛
在Play控制臺(tái)中,使用“ clean”,然后使用“ publish-local”打包您的模塊,并將其發(fā)布到本地倉(cāng)庫(kù):
[mylogger] $ publish-local [info] Updating {file:/tmp/mylogger/project-code/}mylogger... [info] Packaging /tmp/mylogger/project-code/target/scala-2.9.1/mylogger_2.9.1-1.0-SNAPSHOT-sources.jar ... [info] Done packaging. [info] Wrote /tmp/mylogger/project-code/target/scala-2.9.1/mylogger_2.9.1-1.0-SNAPSHOT.pom [info] Done updating. [info] :: delivering :: mylogger#mylogger_2.9.1;1.0-SNAPSHOT :: 1.0-SNAPSHOT :: release :: Mon Mar 19 20:57:26 CET 2012 [info] delivering ivy file to /tmp/mylogger/project-code/target/scala-2.9.1/ivy-1.0-SNAPSHOT.xml [info] Compiling 1 Java source to /tmp/mylogger/project-code/target/scala-2.9.1/classes... [info] Generating API documentation for main sources... model contains 4 documentable templates [info] Packaging /tmp/mylogger/project-code/target/scala-2.9.1/mylogger_2.9.1-1.0-SNAPSHOT.jar ... [info] Done packaging. [info] API documentation generation successful. [info] Packaging /tmp/mylogger/project-code/target/scala-2.9.1/mylogger_2.9.1-1.0-SNAPSHOT-javadoc.jar ... [info] Done packaging. [info] published mylogger_2.9.1 to /home/steve/development/play/play-2.0/framework/../repository/local/mylogger/mylogger_2.9.1/1.0-SNAPSHOT/poms/mylogger_2.9.1.pom [info] published mylogger_2.9.1 to /home/steve/development/play/play-2.0/framework/../repository/local/mylogger/mylogger_2.9.1/1.0-SNAPSHOT/jars/mylogger_2.9.1.jar [info] published mylogger_2.9.1 to /home/steve/development/play/play-2.0/framework/../repository/local/mylogger/mylogger_2.9.1/1.0-SNAPSHOT/srcs/mylogger_2.9.1-sources.jar [info] published mylogger_2.9.1 to /home/steve/development/play/play-2.0/framework/../repository/local/mylogger/mylogger_2.9.1/1.0-SNAPSHOT/docs/mylogger_2.9.1-javadoc.jar [info] published ivy to /home/steve/development/play/play-2.0/framework/../repository/local/mylogger/mylogger_2.9.1/1.0-SNAPSHOT/ivys/ivy.xml [success] Total time: 4 s, completed Mar 19, 2012 8:57:28 PM如果您查看$ PLAY_HOME / repository / local,現(xiàn)在將看到一個(gè)名為mylogger的目錄。 由于我們沒(méi)有提供組織名稱,因此該組織與模塊本身具有相同的名稱。 進(jìn)入mylogger,您將看到工件– mylogger_2.9.1。 文件名的2.9.1部分來(lái)自Play本身,并且(似乎是)版本控制。 如果有人對(duì)此有更多了解,請(qǐng)發(fā)表評(píng)論并告訴我。
在mylogger_2.9.1中,我們具有模塊版本,在本例中為1.0-SNAPSHOT,而該版本又包含jar文件,源jar,Maven和Iyy信息等。
所有這些信息從何而來(lái)? 它基于project / Build.scala文件。 在這里,您可以提供模塊的名稱,組織,版本和其他各種信息。 目前,我們將保持原樣,但是隨著我們對(duì)某些問(wèn)題的深入了解,此極其重要的文件將得到更新。
4.提供樣品
您可以編寫(xiě)世界上最好,最令人難以置信的有用模塊,但是如果沒(méi)有示例應(yīng)用程序來(lái)a)展示它的工作原理,b)展示它的工作原理,那么您將難以令人信服。 這就是為什么我們?cè)谧畛鮿?chuàng)建模塊時(shí)將目錄結(jié)構(gòu)改回原來(lái)的原因。 打開(kāi)另一個(gè)終端,然后轉(zhuǎn)到mylogger / samples目錄-現(xiàn)在該展示mylogger可以做什么。
4.1一個(gè)示例應(yīng)用程序是一個(gè)Play應(yīng)用程序
由于我們正在編寫(xiě)一個(gè)Play模塊,因此提供一個(gè)Play應(yīng)用程序作為示例很有意義。 現(xiàn)在我們?cè)趍ylogger /示例中,使用“播放新的mylogger-示例”來(lái)創(chuàng)建示例應(yīng)用程序。 同樣,選擇選項(xiàng)2來(lái)制作一個(gè)簡(jiǎn)單的Java應(yīng)用程序。
4.2聲明依賴
為了使用mylogger,我們必須在mylogger-sample / project / Build.scala中為其聲明一個(gè)依賴項(xiàng)。 打開(kāi)此文件,然后更改
val appDependencies = Seq(// Add your project dependencies here,)至
val appDependencies = Seq("mylogger" % "mylogger_2.9.1" % "1.0-SNAPSHOT")您可以看到這與mylogger / mylogger_2.9.1 / 1.0-SNAPSHOT的存儲(chǔ)庫(kù)路徑匹配。
懶洋洋地,我們還將聲明本地存儲(chǔ)庫(kù)為查找模塊的地方。 更改
val main = PlayProject(appName, appVersion, appDependencies, mainLang = JAVA).settings(// Add your own project settings here)至
val main = PlayProject(appName, appVersion, appDependencies, mainLang = JAVA).settings(resolvers += "Local Play Repository" at "file://path/to/play-2.0/repository/local")(但更改路徑以適合您的本地安裝)
在mylogger / samples / mylogger-sample目錄中,使用“ play”啟動(dòng)Play控制臺(tái)。 如果使用“ dependencies”命令,您將看到mylogger現(xiàn)在是應(yīng)用程序的依賴項(xiàng)。
重要的提示! 自從我們?cè)诟腂uild.scala后啟動(dòng)了Play控制臺(tái)以來(lái),所做的更改將自動(dòng)被提取。 如果在控制臺(tái)打開(kāi)時(shí)更改此文件,請(qǐng)使用“重新加載”以確保使用了更改。
4.2使用模塊
在您新的默認(rèn)Play應(yīng)用程序中,我們將向控制器/Application.java添加一行以調(diào)用MyLogger:
package controllers;import play.mvc.Controller; import play.mvc.Result; import views.html.index;public class Application extends Controller {public static Result index(){MyLogger.log("Here's my log message");return ok(index.render("Your new application is ready."));} }請(qǐng)注意,我們不需要導(dǎo)入MyLogger,因?yàn)樗苍赾ontrollers軟件包中。
“運(yùn)行”該應(yīng)用程序,然后轉(zhuǎn)到http:// localhost:9000。 片刻之后,頁(yè)面將呈現(xiàn)出來(lái),您將在控制臺(tái)中看到
[info] play - Application started (Dev) MyLogger: Here's my log message重新加載頁(yè)面幾次,您會(huì)看到每次都出現(xiàn)日志消息。
5.再喝一杯啤酒
恭喜,您現(xiàn)在有了一個(gè)模塊和一個(gè)工作示例。 它實(shí)際上并沒(méi)有為您的示例應(yīng)用程序增加多少價(jià)值,但這將在第2部分中得到解決。同時(shí),將頭放在冰箱上,為自己準(zhǔn)備另一杯啤酒。
您可以在此處下載此示例的完整源代碼
參考: Play 2的編寫(xiě)模塊,第1部分:在Objectify博客上從我們的JCG合作伙伴 Steve Chaloner獲得幫助。
翻譯自: https://www.javacodegeeks.com/2012/04/writing-modules-for-play-2-part-1-get.html
總結(jié)
以上是生活随笔為你收集整理的编写Play 2的模块,第1部分:使工作正常的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 公筷是什么颜色 公筷的颜色
- 下一篇: Apache Camel教程– EIP,