EMF-Support für Che

Eclipse Che Tutorial: Tag 3 – Einen Custom Workspace Stack hinzufügen

Maximilian Kögel, Jonas Helming

In dieser Artikel-Serie beschreiben wir unsere Erfahrung mit der Entwicklung von Erweiterungen (Plug-ins) für Eclipse Che. Als durchgängiges Beispiel dient eine erste Version für EMF-Support in Che, welche wir prototypisch entwickelt haben.

Im ersten Teil der Serie haben wir zunächst einen Überblick über unsere Ziele gegeben. Im zweiten Artikel beschreiben wir, wie sich der bereits existierende EMF-Codegenerator in Che wiederverwenden lässt. Um das zu ermöglichen, haben wir eine Eclipse Modeling Tools Edition zu unserem Che Workspace hinzugefügt. Damit konnten wir die Eclipse Modeling Tools über die Befehlszeile auszuführen, um so den EMF-Codegenerator zu starten.

Bisher mussten wir die Eclipse Desktop IDE manuell in unseren Che-Workspace installieren. Weiterhin haben wir manuell einen Befehl in unserer Che-IDE definiert, um die Code-Generierung ganz bequem mit einem Klick auf einen Button durchzuführen.

Während das alles bereits gut funktioniert, möchten wir die notwendigen Schritte automatisieren, so dass wir die Umgebung mit anderen Entwicklern teilen können. Dies kann einfach umgesetzt werden, indem ein so genannter „Stack“ in Che definiert wird. Ein Stack ist wie eine Vorlage für einen laufenden Workspace. In Objekt-orientierter Terminologie ist ein Stack eine Klasse, während eine laufende Instanz (ein Objekt) Workspace genannt wird.

Stacks lassen sich direkt im Che Dashboard UI definieren, somit müssen wir keinen Code schreiben. Technisch gesehen basiert ein Che-Stack auf einem oder mehreren Docker-Containern. Wenn wir einen Stack zur Verfügung stellen wollen, der mit einer vorinstallierten Eclipse Modeling Edition ausgeliefert wird, wird also zuvor ein entsprechender Docker Container benötigt.

Ein neuer Docker Container wird am einfachsten von einem bereits existierenden abgeleitet. Folgendes Listing zeigt das erstellte Dockerfile, welches die Eclipse Modeling Edition zusätzlich installiert. Die enthaltenen Kommentare sollten das Beispiel selbsterklärend machen.

FROM codenvy/ubuntu_jdk8
MAINTAINER Mathias Hansen mhansen@eclipsesource.com
USER root
# Install Eclipse Modeling Tools
RUN echo "Installing eclipse..."
cd /
wget -q -O - https://ftp.fau.de/eclipse/technology/epp/downloads/release/neon/1/eclipse-modeling-neon-1-linux-gtk-x86_64.tar.gz | tar zx
# Reset to the default user
USER user

Anschließend muss der Docker Container gebaut werden:

docker build -t eclipsesource/emfneon_jdk8

Zu guter Letzt kann man das neue Image zu einer Registry oder einem Repository pushen, beispielsweise zu Docker Hub.

Basierend auf dem Docker Container kann man nun einen Che Stack aufsetzen. Um einen neuen Stack zu erzeugen, navigiert man zu der „Stacks“-Sektion in der Che-Sidebar und wählt „Add Stack“. Ein Wizard führt durch die notwendige Konfiguration:

 

Hier lässt sich das eben erstellte Docker Image auswählen. Zusätzlich kann man Befehle hinzufügen (z.B. unser „Run EMF Code Generator“-Befehl, der im letzten Teil dieser Serie manuell erstellt wurde). Im letzten Schritt, wählt man die Kategorie, unter welcher der Stack aufgeführt wird. Wenn man zu dem Ende der Seite scrollt, kann man außerdem die Stack-Konfiguration im JSON-Format editieren. Das ist praktisch, wenn man beispielsweise seine Stack Konfiguration mit Kollegen teilen will. Um das zu tun, kann man einfach das JSON kopieren und verschicken. Das JSON für unseren EMF Stack sieht wie folgt aus. Sie können das Beispiel direkt kopieren und in die Raw-Ansicht einfügen, um die Stack-Definition selbst auszuprobieren:

{
  "name": "EMF",
  "description": "EMF Stack",
  "scope": "advanced",
  "tags": [
    "Java 1.8",
    "EMF"
  ],
  "components": [
    {
      "name": "Eclipse Modeling Edition",
      "version": "Neon.2"
    }
  ],
  "source": {
    "type": "image",
    "origin": "codenvy/ubuntu_jdk8"
  },
  "workspaceConfig": {
    "environments": {
      "EMF": {
        "machines": {
          "dev-machine": {
            "agents": [
              "org.eclipse.che.terminal",
              "org.eclipse.che.ws-agent",
              "org.eclipse.che.ssh"
            ],
            "servers": {},
            "attributes": {
              "memoryLimitBytes": "2147483648"
            }
          },
          "EMF": {
            "agents": [
              "org.eclipse.che.terminal",
              "org.eclipse.che.ssh"
            ],
            "servers": {},
            "attributes": {}
          }
        },
        "recipe": {
          "content": "services:\n dev-machine:\n  image: codenvy/ubuntu_jdk8\n EMF:\n  image: eclipsesource/emfneon_jdk8\n  mem_limit: 2147483648\n",
          "contentType": "application/x-yaml",
          "type": "compose"
        }
      }
    },
    "name": "default",
    "defaultEnv": "EMF",
    "description": null,
    "commands": [
      {
        "name": "Run EMF Code Generator",
        "type": "custom",
        "commandLine": "/eclipse/eclipse -noSplash -data ${current.project.path} -application org.eclipse.emf.codegen.ecore.Generator -model -edit ${current.project.path}/org.eclipse.emf.ecp.makeithappen.model/model/task.genmodel ",
        "attributes": {}
      }
    ]
  }
}

Mit dem definierten Stack lässt sich die EMF-Entwicklungsumgebung bereits mit anderen Programmierern teilen. Der EMF-Codegenerator ist direkt im Che-Workspace enthalten. Dazu muss lediglich eine JSON-Datei importiert werden.

Die Installation von Tooling per Stack in einen Che Workspace ist ein simpler, leichtgewichtiger und trotzdem mächtiger Mechanismus für Extensions. Eigentlich kann jedes Tool, das in einem Docker Container laufen kann, genutzt werden. Dadurch sind wir in der Lage, Che zu erweitern, ohne Code schreiben zu müssen. Daher haben wir die Browser-IDE selbst bisher noch nicht erweitert (abgesehen von dem hinzugefügten Befehl), sondern lediglich den Workspace. Um die IDE selbst anzupassen, muss allerdings doch etwas Code geschrieben sowie eine eigene Version von Che gebaut werden. Diesen Workflow werden wir in unserem nächsten Artikel beschreiben.

 

Eclipse Che Tutorial: Übersicht
Tag 1: Eclipse Che lokal ausführen und existierende EMF-Projekte importieren
Tag 2: Code Generation
Tag 3: Einen Custom Workspace Stack hinzufügen
Geschrieben von
Maximilian Kögel
Maximilian Kögel
Dr. Maximilian Kögel ist Geschäftsführer der EclipseSource München GmbH und arbeitet als Senior Software Architect im Bereich Eclipse- und Web-Technologie. Neben seiner Fokussierung auf das Eclipse Modeling Framework und Eclipse RCP ist er auch mit der Entwicklung von Webapplikationen mit AngularJS, Web Components und JSON Schema vertraut. Ein Kernthema seiner Arbeit ist das Erstellen von Modellierungswerkzeugen basierend sowohl auf einem Eclipse- als auch einem Web Technologiestack. Er ist ein aktives Mitglied der Eclipse-Community, regelmäßiger Sprecher auf EclipseCons, Leiter und Committer bei mehreren Eclipse Projekten, u.a. EMFForms und EMF Core und nicht zuletzt Mitglied im Eclipse Architecture Council. Auch außerhalb des Eclipse Ökosystems ist er in Open-Source-Projekten aktiv und leitet z.B. das JSONForms-Projekt zur Entwicklung von Web-Applikationen. Als Berater und Trainer verfügt er über langjährige Erfahrung in der Anwendung und Vermittlung von Expertenwissen rund um Java, Eclipse und Web-Technologien sowie agilen Prozessen.
Jonas Helming
Jonas Helming
Dr. Jonas Helming ist Geschäftsführer der EclipseSource München GmbH sowie Consultant, Trainer und Software Engineer im Bereich Eclipse-Technologie. Seine Schwerpunkte liegen neben Java auf den Technologien Eclipse RCP, Eclipse-Modellierung und Eclipse 4. Weiterhin verfügt er über mehrjährige Erfahrung in der Etablierung und Anwendung von agilen Prozessen. Jonas ist aktives Mitglied der Eclipse-Community, leitet mit der EMF Client Plattform und dem EMFStore zwei bei der Eclipse Foundation gehostete Open-Source-Projekte und ist in einigen weiteren aktiv beteiligt. Als Berater und Trainer verfügt er über mehrjährige Erfahrung in der Vermittlung von Themen rund um Java und Eclipse sowie agilen Prozessen und hält einen Lehrauftrag der Technischen Universität München. Darüber hinaus ist er als Speaker regelmäßig auf Kernkonferenzen wie der JAX oder der EclipseCon. Kontakt: jhelming@eclipsesource.com
Kommentare

Hinterlasse einen Kommentar

Hinterlasse den ersten Kommentar!

avatar
400
  Subscribe  
Benachrichtige mich zu: