模板技術之Twirl-構建你想要的一切

上篇文章介紹了國內的模板技術Beetl,今天介紹下Twril模板技術,該技術被用於在ODL-Cardon版本及之後的YANG模板代碼生成中。Twirl是play默認的模板引擎,用Scala編寫。模板會被編譯成Scala函數。從所周知ODL採用的JAVA語言,想使Twril可用,還需要最終編譯成JAVA語言的JAR包。

看示例:

項目目錄

模板文件hello.scal.txt默認必須放置在twirl目錄下,其內容如下:

twril模板

具體的模板語法,這裡不作詳細介紹,從上面模板內容分析:

@(customer:Customer,orders:List[Order]):表示該模板接受兩個參數,分別是Customer對象和Order列表

@customer.name :表示獲取傳入customer實例的name屬性

上面說過,該模板使用scala編寫,需要編譯

<plugin>

<groupid>com.jakewharton.twirl/<groupid>

<artifactid>twirl-maven-plugin/<artifactid>

<version>1.0.4/<version>

<executions>

<execution>

twirl-to-scala-first

<phase>generate-sources/<phase>

<goals>

<goal>compile/<goal>

由於我們使用的是JAVA方法,所以還需要編譯成class

<plugin>

<groupid>net.alchim31.maven/<groupid>

<artifactid>scala-maven-plugin/<artifactid>

<version>3.2.2/<version>

<executions>

<execution>

scala-compile-second

<phase>process-resources/<phase>

<goals>

<goal>add-source/<goal>

<goal>compile/<goal>

這樣執行編譯後,在對應目錄下,則會生成class文件

hello.class

到這一部,則可以直接使用hello類進行模板操作,測試用例如下:

測試用例

核心方法為hello.render,這樣則會按模板定義規範輸出對應的內容

輸出

可能需要的依賴:

<dependency>

<groupid>com.typesafe.play/<groupid>

<artifactid>twirl-api_2.11/<artifactid>

<version>1.1.1/<version>

其餘可參考:https://www.playframework.com/documentation/2.6.x/ScalaTemplates