編寫Play 2的模塊,第1部分:使工作正常

幾周前,我遷移了Play! 框架 1.x版本的Deadbolt應用于Play 2平臺,并且對缺少有關創建模塊的信息感到驚訝。 Play 1.x文檔中詳細介紹了該主題,這使得創建模塊非常簡單。 顯然,需要做些事情-這是關于為Play 2創建模塊和插件的三部分系列文章的第一篇。

重要的是要注意,這不是權威指南,而是我在處理自己的模塊時所使用的信息和技術的集合。

我將假設您已經安裝了Play 2,如果沒有,請直接訪問http://www.playframework.org/documentation/2.0/Installing ,以獲取有關如何進行設置的詳細信息。

在第一部分中,我們將介紹創建和發布模塊以及添加示例應用程序的基礎知識。 接下來的兩部分將更深入地介紹插件,攔截器,標簽和其他有用的工具。

首先,簡要介紹一下模塊和庫之間的區別。 在Play 1.x中,使用“ play new-module”創建了一個模塊,并通過模塊存儲庫進行分發。 在Play 1.1之前,模塊都是通過application.conf條目控制的,并且庫是在本地添加的。 從Play 1.2開始,模塊和庫都通過基于Ivy的依賴關系管理機制進行控制。 不過,在這兩種情況下,都有一個明確的模塊概念(與Play緊密集成,遵循Play的封裝結構等約定)和一個庫(一個通用的第三方庫)。

在播放2中,線條模糊到一定程度。 現在,通過Ivy或Maven,模塊以與庫相同的方式分發,并且包結構可以是任意的,因此您可以擁有傳統的com.example.whatever結構。 從這個角度來看,模塊和庫之間的唯一真正區別是模塊直接使用Play API。

其次,關于語言的說明。 由于Play 2本身支持Java和Scala,因此您可以使用任何一種語言來實現模塊。 如果模塊具有自己的應用程序可以使用的API,則Java和Scala之間的出色互操作性意味著-在大多數情況下,您所選擇的語言與使用API??的應用程序無關。

1.入門

作為簡單的介紹,我們將創建一個基本的日志記錄模塊,該模塊遵循行業最佳實踐,將輸出寫入控制臺窗口。 這個模塊稱為mylogger,因為它是星期一,而我現在并不覺得很有創意。 該模塊(主要)將用Java編寫。

您可以將Play 2模塊視為是Play 2應用程序,其中缺少一些文件。 因此,您可以按照與應用程序相同的方式來創建模塊。 轉到或創建用于保存項目的目錄,然后使用“播放新的Mylogger”創建應用。 出現提示時選擇選項2,以創建一個簡單的Java應用程序。

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!

因為我們將在模塊旁邊有一個示例應用程序,所以我們將稍微更改目錄結構。 目前,它看起來像這樣:

mylogger
– app
– conf
– project
– public
– target
– .gitignore
– README

在mylogger目錄中,創建兩個新目錄,項目代碼和示例。 將上面列出的所有文件復制到項目代碼目錄中。 您現在應該擁有

mylogger
– samples
– project-code– app– conf– project– public– target– .gitignore– README

conf目錄包含兩個文件-路由和application.conf。

– Play必須存在application.conf才能將mylogger /項目代碼識別為Play應用程序,因此我們無法刪除它,但可以刪除其中包含的所有內容。 模塊需要的任何配置都應添加到“實際”應用程序的application.conf中。
–必須刪除路由*。 如果您不這樣做,它可能/將取代使用該應用程序的任何應用程序的路由文件,這是一件不好的事情(主要是因為什么都不起作用)。

清空application.conf并刪除路由后,在項目代碼中鍵入“ play”以啟動Play控制臺。

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] $

現在,我們有了一個有效的Play 2模塊(請注意,它什么也不做)。

如果您使用的是IDE,那么現在是創建項目的好時機-本教程與IDE無關,因此,如果需要,您可以使用位于http://www.playframework.org/documentation/2.0/IDE的指南。去做這個。

2.添加一些功能

如上所述,Play 2模塊可以具有更傳統的com.example.package包結構,但是默認的Play應用程序具有傳統的app / controllers,app / models等結構。 我們現在將其保留,并在本教程的后面部分進行更改。

2.1刀耕火種

在app文件夾中,我們具有“ play new”命令為我們創建的以下結構:

app
– controllers– Application.java
– views– index.scala.html– main.scala.html

對于此模塊的初始迭代,我們不需要任何視圖,因此您可以刪除視圖包。

您也可以刪除Application.java,因為我們是從頭開始編寫的。

2.2添加一些模塊代碼

在controllers包中,創建一個名為MyLogger.java的新類。 它不需要擴展或實現任何東西,它包含一個方法:

package controllers;/*** @author Steve Chaloner*/
public class MyLogger
{public static void log(String message){System.out.println("MyLogger: " + message);}
}

2.3喝啤酒

您剛剛編寫了一個模塊。 去喝啤酒。

2.4啤酒后實現

當您凝視著現在空蕩蕩的杯子,充滿創造力的喜悅和即將來臨的行業聲譽時,您可能會意識到,實際上沒有人能夠進入您的模塊,因為它位于您的計算機上。 您需要發布它。

3.發布并受到譴責

對于此示例,我們將要發布到您的本地存儲庫。 在Play安裝的根目錄中,有一個存儲庫目錄,這是您首先推送模塊的位置。

發布之前,請始終確保已運行“干凈”,否則,從源樹中刪除的某些類/文件可能仍以編譯形式存在,并最終出現在模塊jar文件中。 如果該類與您實際應用程序中的類匹配,則可以在您的實際類中代替它。 真爛

在Play控制臺中,使用“ clean”,然后使用“ publish-local”打包您的模塊,并將其發布到本地倉庫:

[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,現在將看到一個名為mylogger的目錄。 由于我們沒有提供組織名稱,因此該組織與模塊本身具有相同的名稱。 進入mylogger,您將看到工件– mylogger_2.9.1。 文件名的2.9.1部分來自Play本身,并且(似乎是)版本控制。 如果有人對此有更多了解,請發表評論并告訴我。

在mylogger_2.9.1中,我們具有模塊版本,在本例中為1.0-SNAPSHOT,而該版本又包含jar文件,源jar,Maven和Iyy信息等。

所有這些信息從何而來? 它基于project / Build.scala文件。 在這里,您可以提供模塊的名稱,組織,版本和其他各種信息。 目前,我們將保持原樣,但是隨著我們對某些問題的深入了解,此極其重要的文件將得到更新。

4.提供樣品

您可以編寫世界上最好,最令人難以置信的有用模塊,但是如果沒有示例應用程序來a)展示它的工作原理,b)展示它的工作原理,那么您將難以令人信服。 這就是為什么我們在最初創建模塊時將目錄結構改回原來的原因。 打開另一個終端,然后轉到mylogger / samples目錄-現在該展示mylogger可以做什么。

4.1一個示例應用程序是一個Play應用程序

由于我們正在編寫一個Play模塊,因此提供一個Play應用程序作為示例很有意義。 現在我們在mylogger /示例中,使用“播放新的mylogger-示例”來創建示例應用程序。 同樣,選擇選項2來制作一個簡單的Java應用程序。

4.2聲明依賴

為了使用mylogger,我們必須在mylogger-sample / project / Build.scala中為其聲明一個依賴項。 打開此文件,然后更改

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的存儲庫路徑匹配。

懶洋洋地,我們還將聲明本地存儲庫為查找模塊的地方。 更改

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”啟動Play控制臺。 如果使用“ dependencies”命令,您將看到mylogger現在是應用程序的依賴項。

重要的提示! 自從我們在更改Build.scala后啟動了Play控制臺以來,所做的更改將自動被提取。 如果在控制臺打開時更改此文件,請使用“重新加載”以確保使用了更改。

4.2使用模塊

在您新的默認Play應用程序中,我們將向控制器/Application.java添加一行以調用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."));}
}

請注意,我們不需要導入MyLogger,因為它也在controllers軟件包中。

“運行”該應用程序,然后轉到http:// localhost:9000。 片刻之后,頁面將呈現出來,您將在控制臺中看到

[info] play - Application started (Dev)
MyLogger: Here's my log message

重新加載頁面幾次,您會看到每次都出現日志消息。

5.再喝一杯啤酒

恭喜,您現在有了一個模塊和一個工作示例。 它實際上并沒有為您的示例應用程序增加多少價值,但這將在第2部分中得到解決。同時,將頭放在冰箱上,為自己準備另一杯啤酒。

您可以在此處下載此示例的完整源代碼

參考: Play 2的編寫模塊,第1部分:在Objectify博客上從我們的JCG合作伙伴 Steve Chaloner獲得幫助。


翻譯自: https://www.javacodegeeks.com/2012/04/writing-modules-for-play-2-part-1-get.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/373071.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/373071.shtml
英文地址,請注明出處:http://en.pswp.cn/news/373071.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Dotnet Core

Global Exceptionhttp://www.talkingdotnet.com/global-exception-handling-in-aspnet-core-webapi/轉載于:https://www.cnblogs.com/zwheui/p/6339692.html

交友系統設計:哪種地理空間鄰近算法更快?

小熊學Java:https://javaxiaobear.cn 交友與婚戀是人們最基本的需求之一。隨著互聯網時代的不斷發展,移動社交軟件已經成為了人們生活中必不可少的一部分。然而,熟人社交并不能完全滿足年輕人的社交與情感需求,于是陌生人交友平臺…

linux ntp 'ntp_request.c'遠程拒絕服務漏洞,NTP 'ntp_request.c'遠程拒絕服務漏洞

NTP ntp_request.c遠程拒絕服務漏洞發布日期:2013-12-30更新日期:2014-01-09受影響系統:NTP NTP 描述:--------------------------------------------------------------------------------BUGTRAQ ID: 64692CVE(CAN) ID: CVE-20…

指針的內容 ; 指針的地址 指針所指向的內容 指針的類型 指針所指向的類型...

這幾個個東東很具有迷惑性。 int a10; //假設a的地址是 0x0000004C int *p; //假設p的地址是 0x0035FA94 p&a; 指針的內容:指針里面存放的是地址。 指針p里面存放的是a的地址(&a)。即指針p里面存放的內容是0x0000004C。 指針的地址&#xff…

Apache Camel教程– EIP,路由,組件,測試和其他概念的簡介

公司之間的數據交換增加了很多。 必須集成的應用程序數量也增加了。 這些接口使用不同的技術,協議和數據格式。 但是,這些應用程序的集成應以標準化的方式建模,有效實現并由自動測試支持。 企業集成模式(EIP)[1]中存在…

iOS開發UI篇—UITableview控件簡單介紹

一、基本介紹 在眾多移動應?用中,能看到各式各樣的表格數據 。 在iOS中,要實現表格數據展示,最常用的做法就是使用UITableView,UITableView繼承自UIScrollView,因此支持垂直滾動,?且性能極佳 。 UITableview有分組和不分組兩種樣式,可以在storyboard或…

PL/SQL 08 異常 exception

--PL/SQL錯誤 編譯時 運行時--運行時的出錯處理 EXCEPTION --異常處理塊DECLARE …BEGIN …EXCEPTION WHEN OTHERS THEN handler_error(…);END; --用戶自定義的異常DECLARE e_TooManyStudents EXCEPTION; …BEGIN … RAISE e_TooManyStudents; …EXCEPTION WHEN e_TooMany…

html鼠標事件沒反應,鼠標有時候點擊沒反應怎么解決

關于鼠標有時候點擊沒反應的問題,一些網友顯得一頭霧水,那這該怎么解決呢?下面就由小編來給你們說說鼠標有時候點擊沒反應的原因及解決方法吧,希望可以幫到你們哦!鼠標有時候點擊沒反應的解決方法一:一,系統繁忙&…

動態ADF火車:以編程方式添加火車停靠站

我將展示如何以編程方式“即時”將火車停靠站添加到ADF火車中。 在我的用例中,我有一些票務預訂應用程序。 它具有訓練模型的有限任務流。 在火車的第一站,用戶輸入乘客的數量,在隨后的站點,他們輸入一些乘客的信息。 帶有乘客信息…

修改sqlserver的數據庫排序規則語句

alter database SOETMS collate Chinese_PRC_CI_AS 轉載于:https://www.cnblogs.com/lxboy2009/p/5481977.html

關于存儲過程權限

關于ORACLE賬號的權限問題,一般分為兩種權限: 系統權限: 允許用戶執行特定的數據庫動作,如創建表、創建索引、創建存儲過程等 對象權限: 允許用戶操縱一些特定的對象,如讀取視圖,可更新某些列、執行存儲過程等 像這種查…

寧波鎮海2021年高考成績查詢,最新!2021年,寧波鎮海區的這14所中小學“爆了...

寧波鎮海區教育局發布了2021年公辦學校小學一年級、初中一年級招生第一次預警,這也是寧波首個發布2021年公辦學校招生預警的縣、市、區。根據最新數據摸排,寧波鎮海區有8所小學紅色預警、2所初中紅色預警,1所小學黃色預警、3所初中黃色預警。…

用Java解決生產者-消費者問題

當我們嘗試多線程編程時,生產者-消費者問題是最常見的問題之一。 盡管不像多線程編程中的其他一些問題那樣具有挑戰性,但是錯誤地實現此問題可能會造成應用程序混亂。 生產的物品將不使用,開始的物品將被跳過,消耗量取決于生產是在…

哪位科學家奠定了計算機結構理論,計算機等級考試一級理論知識選擇題題庫(1-50)...

領域中的問題為主的數值計算稱為科學計算B)計算機應用可分為數值應用和非數值應用兩類C)計算機各部件之間有兩股信息流,即數據流和控制流D)對信息(即各種形式的數據)進行收集、儲存、加工與傳輸等一系列活動的總稱為實時控制答案:D32. 金卡工程是我國正在…

axios 參數為payload的解決方法

1. 添加頭部headers headers: {Content-Type: application/x-www-form-urlencoded,}, axios.post(url, {a: 1, b:2}, {headers: {Content-Type: application/x-www-form-urlencoded,}, }).then(response > response.data).then(err > {console.log(err);}); 2. 在Browser…

超出了GC開銷限制– Java堆分析

這篇文章是我們原來的GC超出限制的問題模式帖子的延續。 正確的Java堆分析對于消除O??utOfMemoryError:GC開銷問題至關重要。 如果您不熟悉此Java HotSpot 1.6錯誤,建議您首先閱讀有關此主題的第一篇文章 。 本文將為您提供一個示例程序和一個教程&…

開燈問題

開燈問題 時間限制:3000 ms | 內存限制:65535 KB難度:1描述有n盞燈,編號為1~n,第1個人把所有燈打開,第2個人按下所有編號為2 的倍數的開關(這些燈將被關掉),第3 個人按…

計算機科學基本理論,計算機科學的基礎知識.ppt

計算機科學的基礎知識第二章 計算機科學的基礎知識 本章學習目標: 數據的理解、分類與表示 計算機的基本結構與工作原理 程序設計基礎 算法基礎 2.1 數據類型 2.2 計算機內部的數據 2.3 表示數據 2.4 十進制表示法 2.5 二進制表示法 2.6 十六進制表示法 2.7 八進制表…

損壞注冊表的原因

軟件: (1)應用程序錯誤 (2)驅動程序不兼容或使用了錯誤的應用程序 (3)應用程序在注冊表中添加了錯誤的內容 (4)應用程序添加了錯誤的數據文件和應用程序之間的聯系 硬件: &#xff0…

cdockpane限制調整大小_影視后期制作小伙伴必看:使用AU對聲音質量進行調整的三大技巧...

一、增幅一般人進入AU的音頻調整界面,會使用圖中的旋鈕進行音量調整,這種操作是錯誤的,因為通過拖拽并不能確定調整音量的大小幅度,精準度極低,反復操作才能試出最佳音量,效率極低。最優方案是使用左側效果…