在che中增長EMF支持 - Day4:building Che

在上一篇中,咱們描述瞭如何爲代碼生成提供支持和建立自定義堆棧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有着能夠靈活擴展的框架。主要是因爲其服務導向的核心模式。有幾種不一樣的方式將其用於拓展。瀏覽器

  • Che提供的服務能夠在UI中構建幾乎任何東西。做爲一個實例,che提供了一項服務來註冊菜單欄對應的操做。做爲另外一個例子,也有註冊文件擴展名的服務(指定相應的圖表和默認的編輯器)。這些服務能夠被分層到不一樣的UI對象,好比不一樣的菜單、面板和佈局等等。
  • Che提供訪問源文件、工做空間運行時的服務。利用這些特性,在頂部添加新功能很簡單。
  • Che的服務器主要是RESTful服務的集合。經過向服務器添加自定義的REST服務,你能夠輕鬆的增強Che。所以,自定義的服務能夠經過瀏覽器IDE中的自定義的擴展來調用。
  • 最後,Che定義了服務接口,能夠經過擴展以後提供新內容。好比,你能夠實現一個服務,這個服務能夠實現一個建立本身定義項目的工做。

區別:目前在Che中沒經典的Eclipse IDE中的運行時插件機制。這就意味着,若是你想擴展Che,你須要build一個包含你的插件的自定義的版本,而且將整個程序部署在某個地方。技術上說,Che開面的插件maven模塊,是你在編譯的期間添加到全局框架裏的。瀏覽器IDE在運行時沒有可擴展性。那麼,和經典的Eclipse IDE相比,這豈不是一種倒退?關於這個問題,不一樣的人有着不一樣的觀點:服務器

  • ,由於Che支持的運行時可擴展性,基於它的工做空間的理念。若是你在運行時缺乏任何工具和組件,只須要將其擴展到工做區間,而後與同事們共享便可。做爲實例,咱們運行時增長了EMF代碼生成的支持。而在一個景點的Eclipse IDE中,每一個人都須要再次安裝相同的東西(至少在不使用Oomph時)。
  • 部分意義上,在運行時,你只能擴展工做空間,而不能擴展瀏覽器IDE和Che的服務器。可是,Che有一個不一樣的部署方案。因爲它是一個服務器-客戶端類型的應用,想法就是對其作一次集中的設置,而後共享給一批須要相同工具集的開發者。這樣能夠爲項目開發者提供一個快速的配置方式。它甚至能夠用不一樣的IDE去訪問同一個workspace。可是,這意味着做者和插件維護者須要更多的工做,但對開發者來說很簡單。
  • 是的,咱們失去了OSGi,p2庫擴展點。雖然前二者過去一直被批評,但還是一個構建模塊化和可擴展應用程序的強大組合。將其與Eclipse提供的強大的工具結合,能夠進行有效的開發、安裝、更新和部署IDE擴展。這是一個龐大的工具生態系統的核心要素之一。

因此最後,它實際上取決於場景和你的設計目標。值得一提的是,有一個大趨勢(也跟隨Che)是將IDE的UI相關部分移動到服務器端抽象中,以便它們變得獨立。語言服務器協議就是一個很好的例子。在這種狀況下,IDE只需支持解釋抽象,例如LSP。所以,客戶端站點的可擴展性可能變得不那麼重要了。app

Anyway,咱們先開始在本地創建Che。框架

clipboard.png

首先,您須要安裝全部必備條件來構建和運行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」註冊自定義文件類型,包括自定義圖標。

相關文章
相關標籤/搜索