在上一篇中,咱們描述瞭如何爲代碼生成
提供支持和建立自定義堆棧
。java
目前爲止,咱們尚未爲擴展Che添加任何一段代碼。咱們使用Che的workspace的概念,演示瞭如何將其做爲一個docker容易添加工具。英文瀏覽器IDE容許咱們在運行時執行任何指令,咱們暫時不須要實現什麼東西去擴展它。git
然而有一些需求,加強workspace是不夠的。當你想用新特性加強瀏覽器IDE的UI或者你想在workspace運行時添加新的API。github
在這片博文中,咱們將描述,如何爲瀏覽器IDE建立一個鏡像加強,以簡單的hello world
爲例。這方便咱們初步瞭解擴展Che的整個流程。咱們將在以後的博文中,作更復雜的擴展。docker
咱們EclipseSource
的工做者都有着多年的爲Eclipse的IDE添加擴展和創建基於Eclipse的應用的經驗。因此,在瞭解細節以前,咱們從一個桌面Eclipse IDE開發者的角度總結咱們拓展Che的經歷。咱們主要關注最明顯的類似點和不一樣點。json
類似點:Eclipse Che有着能夠靈活擴展的框架。主要是因爲其服務導向的核心模式。有幾種不一樣的方式將其用於拓展。瀏覽器
RESTful
服務的集合。經過向服務器添加自定義的REST
服務,你能夠輕鬆的增強Che。所以,自定義的服務能夠經過瀏覽器IDE中的自定義的擴展來調用。區別:目前在Che中沒經典的Eclipse IDE中的運行時插件機制。這就意味着,若是你想擴展Che,你須要build一個包含你的插件的自定義的版本,而且將整個程序部署在某個地方。技術上說,Che開面的插件
是maven模塊
,是你在編譯的期間添加到全局框架裏的。瀏覽器IDE在運行時沒有可擴展性。那麼,和經典的Eclipse IDE相比,這豈不是一種倒退?關於這個問題,不一樣的人有着不一樣的觀點:服務器
Oomph
時)。服務器-客戶端
類型的應用,想法就是對其作一次集中的設置,而後共享給一批須要相同工具集的開發者。這樣能夠爲項目開發者提供一個快速的配置方式。它甚至能夠用不一樣的IDE去訪問同一個workspace。可是,這意味着做者和插件維護者須要更多的工做,但對開發者來說很簡單。OSGi
,p2庫
和擴展點
。雖然前二者過去一直被批評,但還是一個構建模塊化和可擴展應用程序的強大組合。將其與Eclipse提供的強大的工具結合,能夠進行有效的開發、安裝、更新和部署IDE擴展。這是一個龐大的工具生態系統的核心要素之一。因此最後,它實際上取決於場景和你的設計目標。值得一提的是,有一個大趨勢(也跟隨Che)是將IDE的UI相關部分移動到服務器端抽象中,以便它們變得獨立。語言服務器協議就是一個很好的例子。在這種狀況下,IDE只需支持解釋抽象,例如LSP
。所以,客戶端站點的可擴展性可能變得不那麼重要了。app
Anyway,咱們先開始在本地創建Che。框架
首先,您須要安裝全部必備條件來構建和運行Che。咱們已經提到過你須要Docker,可是構建Che還須要一些工具和環境設置。eclipse
有兩種方式能夠採用。咱們推薦一開始沒有目的的,根據指南來複制和構建che。第二步,若是你想使用IDE,咱們建議閱讀Che的工做空間指南。
咱們推薦你們花時間認真讀提供的文檔,由於它包含着對開發Che的工做頗有用的信息和提示。你能夠關注一下超級開發模式
,它容許替換GWT應用程序的熱代碼,所以大大減小了在瀏覽器IDE上工做時的週轉時間。
還有一個選項能夠在預配置的Docker環境中構建Che,這樣能夠省去本身設置它的麻煩。但即便你的電腦運行速度很快,Che也須要花很長時間才能完成。因此,咱們建議你看一下咱們會在這裏詳細介紹的這些選項。
構建的過程主要由一些構件組成,在Che的術語中,稱之爲assembly
。你能夠在assembly的子目錄找到它們。您能夠經過將目錄與體系結構進行比對,從而將assembly與Che體系中的組件進行匹配。
構建完成後,您能夠在本地計算機上啓動Che。最簡單的方式是打開到assembly/assembly-main/target/[che-version]/[che-version]
目錄,而後執行bin/che.sh start
。會有一大堆的log信息,最後你在瀏覽器打開localhost:8080
,應該就能看到che的dashboard。
那麼如今,咱們能在本地創建che了,讓咱們作一些小改動來驗證build的過程。一個簡單的修改樣例,就是向瀏覽器IDE添加一個模板項目。模板項目能夠由IDE的用戶本身選擇。好比咱們開發EMF支持的時候,能夠用示例EMF項目做爲模板。在這一系列博文的第二部分,咱們是從git手動導入的,如今咱們要將其做爲固定的模板添加到咱們的自定義assembly裏面。
模板項目基本上都是指向現有git存儲庫的指針。這樣就能夠輕鬆維護模板,而無需從新分配IDE自己。樣例模板在如下文件中維護:
ide/che-core-ide-templates/src/main/resources/samples.json
將下面一段代碼加入到這個文件裏
{ "name": "emfforms-makeithappen-blank", "displayName": "emfforms-makeithappen-blank", "path": "/", "description": "EMFForms, make it happen!", "projectType": "java", "mixins": [], "attributes": { "language": [ "java" ] }, "modules": [], "problems": [], "source": { "type": "git", "location": "https://github.com/eclipsesource/emfforms-makeithappen-blank", "parameters": {} }, "commands": [], "links": [], "category": "Samples", "tags": [ "maven", "java" ] }
以後咱們須要經過執行「bin / che.sh stop」
來中止當前運行的che實例,重建Che而後使用「bin / che.sh start」
再次啓動它。
這樣新的模板項目就可使用的了。
固然,這是一個很是簡單的改變,它甚至不涉及任何代碼。可是,咱們如今準備進行更復雜的更改並開始編寫代碼。請注意,在咱們的示例中,咱們更改了Che的配置文件以添加咱們的自定義項目模板。這種擴展一般是經過調用服務來完成的,這些服務容許擴展Che的基本配置(在咱們的例子中添加一個新的項目模板)。 咱們將在本系列的後面部分回到這個更簡潔的解決方案。
當開始爲擴展Che寫代碼時,這些擴展一般被放置在分離的maven模塊(即插件)中。這在概念上很是相似於爲經典Eclipse開發插件。 這意味着,自定義代碼將與Che的核心分開。咱們將在本系列的下一篇博客文章中詳細描述這一點。 做爲示例,咱們將建立插件,該插件爲「.ecore」註冊自定義文件類型,包括自定義圖標。