(略)在关注编辑支持和客户端模型的建立以前,咱们先看为模板项目进行代码生成。这是咱们目标的一个基础的需求,咱们想使用现有的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获取。请期待~优化