(略)在關注編輯支持和客戶端模型的建立以前,咱們先看爲模板項目進行代碼生成。這是咱們目標的一個基礎的需求,咱們想使用現有的EMF code generator
。因此在che裏面複用已有的Eclipse架構是可行的嗎?java
讓咱們快速的看一哈EMF代碼生成器如何被觸發。默認的方式是利用Eclipse IDE裏的UI。除此以外,EMF提供就一個Java API來運行代碼生成。這聽上去很吸引人,由於Che的server構件也是用java編寫的。也就是說咱們能夠爲Che的server寫一個封裝的功能:由Che的瀏覽器IDE觸發並調用EMF的API來生成代碼。但,等一下,EMF是被設計運行在OSGi
運行時環境的。此話,他使用了一些擴展點(如註冊表打包)。雖然用Java能夠直接調用EMF的代碼生成器,但咱們須要手動將這些東西鏈接起來。在這種場景下,在沒有OSGi
的狀況下設置類的路徑就像噩夢。另外一個壞處是咱們可能須要在咱們的服務器端配置EMF庫,這會使更新變得繁瑣。docker
幸運的是,有一個很簡單的方式來整合現有的代碼生成器。Eclipse的桌面IDE提供了一個在命令行執行的無頭應用程序。用以下的指令,你能夠爲make it happen
樣例生成代碼。shell
$ /eclipse/eclipse \ -noSplash \ # do not show the eclipse splash screen -data /path/to/data/dir \ # the path to be our current project -application org.eclipse.emf.codegen.ecore.Generator \ # the application id to execute -model \ # generate EMF model classes -edit \ # generate EMF edit bundle /path/to/modelname.genmodel # the path to the genmodel file
那麼咱們如何將這一段代碼整合進Che裏面?好消息是咱們能夠直接把Eclipse部署到一個工做空間裏。Che裏的工做空間不單單是託管代碼的目錄。它一樣也是一個docker的容器幷包含一些工具。所以若是咱們將一個Eclipse Modeling Tools Edition
安裝進咱們的工做空間。咱們就能用命令行調用EMF的API生成代碼。瀏覽器
首先,咱們須要在Che的工做空間容器中安裝Eclipse。做爲一個基於Linux image的容器,咱們能夠直接用shell去下載和提取最新的Eclipse Modeling Tools
。下載連接能夠由官網下載(複製Linux 32/64 bit的連接)。若是界面裏沒有shell的話,點擊低端的terminal
便可打開,實際的shell指令以下:服務器
$ sudo su # gain super user privileges (become root) $ cd / # switch to the root directory $ wget ${Download Link} -o eclipse.tar.gz # download eclipse $ tar xfv eclipse.tar.gz # extract the downloaded tar.gz file
而後你就能夠用下面的命令行出發EMF code generator了。架構
$ /eclipse/eclipse \ -noSplash \ -data /projects/makeithappen \ -application org.eclipse.emf.codegen.ecore.Generator \ -model \ -edit \ /projects/makeithappen/org.eclipse.emf.ecp.makeithappen.model/model/task.genmodel
下一張截圖展示了代碼生成器在shell裏打印的log。咱們而後就能夠在IDE打開被生成的代碼。這就意味着,咱們成功在che裏面複用了EMF的代碼生成器!app
如今,咱們完成了從命令行啓動code generator。讓咱們爲用戶提供更便利的方式,而不是來本身輸入這些複雜的指令。咱們想要使得這個代碼生成的過程只需由一個點擊觸發。Che容許咱們本身定義一個‘custom command’
。點擊右上角的下拉菜單選擇Edit commands
。eclipse
而後點擊'+'
,而後點Custom
,如圖所示填好右邊的內容。你就能夠看到Che裏面多了這個指令(剛剛的右上角位置)。然鵝,最後一部分ganmodel的路徑仍是靜態的,工具
如今,咱們就能夠用一個click爲一個模板項目生成代碼了。咱們複用了現有的EMF code generator,也沒有寫過一行代碼。可是,存在不少開放的問題須要提高。好比,咱們只能夠爲固定的項目生成代碼,咱們仍然是在指定的模板上修改,沒法真正改變模型。這些問題都須要咱們進一步優化,以後咱們還會涉及。如今下一部分的內容,咱們先關注如何建立一個custom stack是的咱們的這一部份內容可複用。這個目的是使得咱們這個下載了Eclipse實例的定義了自定義指令的工做關鍵能夠從scratch獲取。請期待~優化