咱们下一步主要的目标是为在Che中添加一个可以编辑EMF模型的自定义的编辑器。为了完成这个,咱们首先为Che建立一个自定义的插件,这样咱们就不会将咱们的代码和che的核心代码混淆。在咱们第一个插件中,咱们将对Che进行两个扩展:注册.ecore
文件做为一个自定义的文件类型,并为这个文件类型注册一个自定义的编辑器。咱们将详细的描述这两个插件,由于他们将会是之后的扩展的一个模板。java
Che里面的插件基本都是加到咱们自定义build里的maven模板。注意Che没有运行时能够添加的插件。git
咱们将手动将模块整合进Che build的过程里,但这会须要一些人工的工做。幸运的是,Che提供了一个简单的方式:会用maven archtypes
生成一个简单的插件,能够做为您本身的插件的基础。github
如下描述基于Eclipse Che(5.13.0)。docker
执行下面的步骤。apache
git clone https://github.com/eclipse/che-archetypes.git
git checkout tags/5.13.0
执行下面的指令:浏览器
mvn org.apache.maven.plugins:maven-archetype-plugin:2.4:generate -DarchetypeRepository=https://maven.codenvycorp.com/content/groups/public/ -DarchetypeGroupId=org.eclipse.che.archetype -DarchetypeArtifactId=plugin-menu-archetype -DarchetypeVersion=5.13.0 -DgroupId=my.plugin -DartifactId=my-sample-plugin -Dversion=0.1-SNAPSHOT -DskipITs -DinteractiveMode=false
这将在“my-sample-plugin”
目录中生成一个示例插件。 该示例包含一个菜单项,触发“Hello from Che !!!”
输出。 您能够浏览插件目录以了解有关示例代码的更多信息。dom
想要用che构建这个插件,切换到my-sample-plugin
目录并执行:eclipse
mvn clean install
最后,在my-sample-plugin
目录中执行以下指令来启动Che($PWD
指当前目录)。maven
docker run -it --rm -v /var/run/docker.sock:/var/run/docker.sock -v $PWD/mydata:/data -v $PWD/assembly-che/assembly-main/target/eclipse-che-0.1-SNAPSHOT/eclipse-che-0.1-SNAPSHOT:/assembly eclipse/che-cli:5.13.0 start
如今,在“https:// localhost:8080”
打开浏览器并建立一个新工做区。 您能够看到生成的示例菜单和操做。编辑器
如今咱们有了一个正在运行的插件,让咱们回到咱们最初的目标:Che内的EMF支持。咱们将使用该插件为Che添加一些扩展:自定义文件类型和自定义编辑器。
目前,没有任何扩展名,Che显示“.ecore”扩展名的通用文件图标以下图:
做为下一个示例,咱们要注册文件扩展名“.ecore”
并显示适当的图标。
首先,咱们将咱们的图标添加到插件目录my-sample-plugin/plugins/my-sample-plugin/my-sample-plugin-ide/src/main/resources
。
而后,咱们须要在GWT中加载图标。为此,咱们在my.plugin.ide
包中建立了一个新的界面IconResource.java
,其中包含如下内容:
package my.plugin.ide; import com.google.gwt.core.client.GWT; import com.google.gwt.resources.client.ClientBundle; import org.vectomatic.dom.svg.ui.SVGResource; public interface IconResource extends ClientBundle { IconResource INSTANCE = GWT.create(IconResource.class); @Source("icon.svg") SVGResource icon(); }
因为咱们在org.vectomatic.dom.svg
中添加了一个依赖项,咱们须要在my-sample-plugin-ide/pom.xml
中添加这个依赖项。
org.vectomatic lib-gwt-svg 0.5.12
这样,咱们就定义了自定义文件类型,并将其加入到Gin模块中。打开SampleMenuGinModule.java
并添加下面的代码,代码内容基本上是为自定义文件类型的一个小工厂:包括了文件类型相关的图标和扩展名。
@Provides @Singleton @Named("EcoreFileType") protected FileType provideEcoreFile(IconResource res) { return new FileType(res.icon(), "ecore"); }
最后,咱们须要注册文件类型并为其注册编辑器。如今咱们直接将Che的默认文本编辑器做为编辑器,以后咱们将使用这段代码将咱们自定义的编辑器做为默认的。
为了进行注册,咱们建立一个新的java类MyEditorExtension.java
。这个扩展类是插件与Che交互的核心位置。这将容许咱们在此到处理一切相关的事情,好比文件类型、编辑器、操做、视图等等。
标记@Extension
告诉Che,这个类提供了扩展。全部方法都将经过dependency injection
方式执行,容许您加入全部必需的参数和服务。 在下面的示例中,咱们加入两个Che服务:编辑器注册表和文件类型注册表,以及咱们的自定义文件类型。首先,咱们将自定义文件类型添加到文件类型注册表中,其次,咱们将自定义文件类型与默认文本编辑器相关联。
@Extension(title = "Ecore Editor") public class MyEditorExtension { @Inject public void registerForFiletype(final EditorRegistry editorRegistry, final FileTypeRegistry fileTypeRegistry, final @Named("EcoreFileType") FileType ecoreFile, final DefaultTextEditorProvider provider ){ fileTypeRegistry.registerFileType(ecoreFile); editorRegistry.registerDefaultEditor(ecoreFile,provider); } }
如今咱们重建Che,全部使用文件扩展名“.ecore”的文件都将使用自定义图标并打开默认文本编辑器:
在这篇博文中,咱们为Che建立了一个插件,容许咱们添加自定义内容,而无需将咱们的代码与Che代码混合。到目前为止,咱们的自定义内容很简单,加了一个图表和注册了一个默认编辑器。但咱们的最终目标是添加自定义编辑器,使得你可以在Eclipse的桌面IDE中同样修改Ecore
文件。有几种不一样的方法来开发这样的编辑器,咱们将在本博客的下一部分介绍。