原文:Meet CLI for CUBA Platformcss
翻譯:CUBA China html
CUBA-Platform 官網 : https://www.cuba-platform.com前端
CUBA China 官網 : http://cuba-platform.cnjava
衆所周知,在軟件開發者的世界,特別是Java開發者,充滿着鍵盤狂人,他們寧願多敲10-15個字符也不肯點擊一下鼠標。CUBA的社區也沒有例外,因此常常有人問咱們,「怎麼能夠不用CUBA Studio而開始一個新項目呢?」 或者 「有沒有免費輕量級的命令行程序能替代Studio呢?」,有的,這裏就有個好消息!git
免費的CLI真的能替換收費的Studio嘛?github
CLI並非爲了替換Studio,他有本身的使命。對於十分熟悉Spring框架,JPA以及CUBA架構的開發者來講,CLI很是有用。而且(很重要哦!),可讓他們很舒服的在黑屏幕灰色字塊的環境工做。簡單說,cuba-cli是個命令行工具,能夠用它來很容易地建立基於CUBA平臺的項目。以及,它爲CUBA項目的主要工件提供輕量級的腳手架代碼,好比entities、screens、services等。
web
但同時,Studio仍是做爲CUBA世界入門的捷徑,由於它能提供很是直觀的用戶界面。經過直觀的界面,哪怕是沒有接觸過CUBA的新用戶也能很容易的在幾分鐘內設計他本身的第一個應用程序,並且甚至不須要任何JPA/Spring或者其餘底層技術的經驗。事實上,對於開發標準的增刪查改的應用程序來講,不須要敲一行代碼,Studio能夠替你完成全部的事情。另外,對於從其餘框架生態系統移植到CUBA的人還有習慣了在一個很是舒服的IDE開發的人來講,Studio是個不錯的選擇。spring
總結一下,CUBA Studio更多關注於「邊作邊學」以及「超級省時」,而CLI是爲你編寫你討厭而必須的腳手架代碼的苦勞力。sql
CLI能幹什麼?數據庫
很明顯,首先你要有CLI。CL支持主流的操做系統,這裏能夠找到各自的安裝嚮導。裝完後,在命令行敲 cuba-cli ,好了,能夠開始新項目或者經過CLI操控現有的項目了。敲tab鍵能夠看到全部支持的命令。選擇或者輸入help命令能夠看到每一個命令的介紹。下面咱們介紹下這些命令,看看他們究竟是作什麼的,以及這些命令怎麼節省開發者的時間和延長鍵盤壽命。
通用功能
help, version, exit, cd - 這些命令看名字就懂,不介紹了。
項目配置和全局設置
create-app - 按照嚮導完成全部步驟便可建立一個CUBA項目:項目名稱,命名空間,根目錄包名,平臺版本以及數據庫配置。建立的項目包含三個模塊:global(core和web模塊都能訪問),core(服務端層,主要的業務邏輯),web(服務端層,頁面控制器以及其餘GUI邏輯)。
polymer - 爲項目添加基於Polymer的客戶端,Polymer是谷歌開發的前端框架。這個步驟會爲新模塊修改 settings.gradle 以及 build.gradle 文件,添加模塊的配置項;還會建立模塊須要的圖片資源,生成登陸頁,菜單欄和其餘一些有用的前端web組件。
theme - 會在 modules/web 目錄建立一個特殊的目錄結構,添加一些應用默認的品牌圖片(登陸圖標,菜單圖標,favicon)以及一些scss文件,能夠修改這些文件更改默認主題。還會在項目添加 webThemesModule 模塊以及在gradle配置文件作相應的修改。最後,這個命令會添加 deployThemes 這個gradle任務,能夠運行這個任務部署主題樣式改動而不須要重啓服務。CUBA手冊的這部分作了詳細介紹。
add-component - 將一個已有的應用程序組件添加到本項目。這個命令會在build.gradle裏面添加一行新的依賴而且修改web模塊的 web.xml 文件將組件的包添加到 appComponents 參數。
領域模型
entity - 爲JPA實體建立樁代碼和相應的DDL數據庫腳本。根據實體類型的不一樣(是不是持久化實體),也會相應的在 persistence.xml 或 metadata.xml 文件註冊實體。最後CLI爲實體屬性建立語言包以便用來作本地化。
enumeration - 生成實現EnumClass接口的枚舉類型,枚舉字段能夠有本地化語言支持,而且有個頗有用的方法 fromId。
業務邏輯
entity-listener - 建立實現了實體監聽器接口的Spring組件腳手架代碼,而且在相應的實體類中進行聲明。這種監聽器會在實體的狀態發生改變時被觸發。這裏有更多的信息。
service - 在global模塊建立服務接口,在core模塊建立服務的實現類,也都是腳手架代碼。爲了能在web模塊使用服務,也在web-spring.xml 的 WebRemoteProxyBeanCreator bean裏面註冊了這個服務。
bean - 生成Spring組件,省掉你敲150個字符的時間。
config - 指定模塊,指定存儲類型(system,DB或者App),而後建立CUBA配置的接口腳手架代碼。CUBA手冊的這章節詳細介紹了CUBA配置接口的使用。
用戶界面
screen - 建立GUI頁面的腳手架代碼。這個命令支持建立:
一個新的空頁面
擴展已有頁面
一個瀏覽頁面:帶有實體列表的頁面,而且有CRUD按鈕以及過濾器。
一個編輯頁面:用來建立或者編輯單個實體的頁面。
這個命令會建立xml頁面描述文件、Java控制器的腳手架代碼,也會建立本地化語言包。同時也能夠選擇是否將頁面添加到主菜單。
項目gradle任務
gradle - 代理執行 gradlew或者gradlew.bat 命令,在gradle命令以後帶上須要執行的參數便可。若是存在gradlew或者gradlew.bat,則會執行相應的命令,不然會顯示找不到相應文件的錯誤。
deploy - 這個命令不是真正的部署,須要部署能夠經過上面的gradle命令來執行須要的部署任務。這個命令是用來修改build.gradle文件建立war和UberJar的gradle任務。
其餘
app-component - 將你的CUBA應用程序轉成可插拔的CUBA應用組件。能夠在這個文檔找到更多關於此概念的介紹。此命令會生成 app-component.xml 文件,定義了此組件依賴的其餘組件,描述了現有的應用模塊、生成的工件以及暴露的應用程序屬性。當運行這個命令時,會提示要求你將現有的模塊前綴修改成惟一的標識符避免在引入多組件時形成命名衝突。若是選擇修改了前綴,那麼同時也會修改settings.gradle和build.gradle文件。
update-script - 按照CUBA平臺的命名規範和目錄結構建立更新數據庫的SQL腳本文件。CUBA平臺會在應用啓動的時候有相應的機制來執行這些腳本,腳本會按照建立的時間順序執行,從最老的到最新的。因此爲了保證這種順序,腳本存放的目錄和文件名有特殊的規範:目錄是 modules/core/db/update/{USED DATABASE}/{yy}/,文件名按照 {yyMMdd}-{INCREMENT}-{SCRIPT NAME}.sql 的格式。
custom-template - 從開發者定義的Apache Velocity模板文件生成項目文件。經過模板機制能夠無需編譯而經過聲明式的方式擴展CLI命令。從這裏瞭解更多的CLI模板引擎功能。
change-prefix - 在開發add-on的時候能夠經過這個命令修改模塊的前綴,以免add-on在集成是發生命名衝突。
premium-repo - 在項目的build.gradle中添加 premium 倉庫。
idea - 經過Intellij IDEA 打開項目。
從上面這些功能能夠看出來,CLI在開發過程當中爲開發者承擔了不少不可避免的繁瑣的工做。
可擴展性
首先,上面已經提到了,CLI提供了模板引擎,能夠不須要更改CLI的源碼,不須要編譯,只經過配置來擴展CLI的命令。CLI模板由下面兩部分組成:
template.xml 文件,裏面聲明瞭一些自定義命令須要詢問的問題。
一組文件(xml,java,或者其餘格式),裏面有Apache Velocity腳本,因此能夠經過Velocity模板引擎處理。template.xml 裏面問題的答案會以參數的方式傳遞給Velocity腳本。
這個wiki 網頁詳細介紹了CLI模板。
其次,CLI也提供了自定義插件的接入點,能夠加載自定義插件而且將CLI事件返回給插件進行處理。經過這個機制,開發者能夠建立本身的新命令或者擴展已有命令,於是具備極大的靈活性。例如,能夠給screen命令添加另外一個選項,好比lookup。這裏有文檔和CLI插件的開發嚮導。
最後,CUBA CLI也是開源項目,能夠在GitHub上找到源碼。
結論
以上談到的這些只是CLI的起點,咱們但願CLI能使得開發過程更加熟練,更加快速,特別是在不使用CUBA Studio的狀況下。接下來,咱們會進一步提高CLI的能力,而且已經有roadmap了。裏面有第二版將要添加的功能。
做爲本文的結論,我想分享一下我的的建議。若是用CLI開啓你的第一個CUBA項目的話,不是那麼容易理解和評估平臺的能力。CUBA Studio有30天免費試用,因此若是你或者你的同事對平臺很陌生,建議使用CUBA Studio做爲入口,在Studio中對平臺進行操做和理解平臺的功能。而後在免費試用結束後,再決定是要繼續購買Studio仍是說能夠直接用CLI了。
最後,能夠在youtube觀看CLI demo。
P.S. 噢,差點忘了提一句,CLI是用Kotlin寫的,這是咱們第一次把這個語言用在了生產環境,目前看還不錯!
歡迎關注CUBA 中國公衆號