在che中增加EMF支持 - Day2:生成代码

(略)在关注编辑支持和客户端模型的创建之前,我们先看为模板项目进行代码生成。这是我们目标的一个基础的需求,我们想使用现有的EMF code generator。所以在che里面复用已有的Eclipse架构是可行的吗?

让我们快速的看一哈EMF代码生成器如何被触发。默认的方式是利用Eclipse IDE里的UI。除此之外,EMF提供就一个Java API来运行代码生成。这听上去很吸引人,因为Che的server构件也是用java编写的。也就是说我们可以为Che的server写一个封装的功能:由Che的浏览器IDE触发并调用EMF的API来生成代码。但,等一下,EMF是被设计运行在OSGi运行时环境的。此话,他使用了一些扩展点(如注册表打包)。虽然用Java可以直接调用EMF的代码生成器,但我们需要手动将这些东西连接起来。在这种场景下,在没有OSGi的情况下设置类的路径就像噩梦。另一个坏处是我们可能需要在我们的服务器端配置EMF库,这会使更新变得繁琐。

幸运的是,有一个很简单的方式来整合现有的代码生成器。Eclipse的桌面IDE提供了一个在命令行执行的无头应用程序。用如下的指令,你可以为make it happen样例生成代码。

$ /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的代码生成器!

《在che中增加EMF支持 - Day2:生成代码》

现在,我们完成了从命令行启动code generator。让我们为用户提供更便利的方式,而不是来自己输入这些复杂的指令。我们想要使得这个代码生成的过程只需由一个点击触发。Che允许我们自己定义一个‘custom command’。点击右上角的下拉菜单选择Edit commands

《在che中增加EMF支持 - Day2:生成代码》

然后点击'+',然后点Custom,如图所示填好右边的内容。你就可以看到Che里面多了这个指令(刚刚的右上角位置)。然鹅,最后一部分ganmodel的路径还是静态的,
《在che中增加EMF支持 - Day2:生成代码》

现在,我们就可以用一个click为一个模板项目生成代码了。我们复用了现有的EMF code generator,也没有写过一行代码。但是,存在很多开放的问题需要提升。比如,我们只可以为固定的项目生成代码,我们仍然是在指定的模板上修改,无法真正改变模型。这些问题都需要我们进一步优化,之后我们还会涉及。现在下一部分的内容,我们先关注如何创建一个custom stack是的我们的这一部分内容可复用。这个目的是使得我们这个下载了Eclipse实例的定义了自定义指令的工作关键可以从scratch获取。请期待~

    原文作者:SimGuo
    原文地址: https://segmentfault.com/a/1190000018889945
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞