{"id":116,"date":"2007-08-16T19:16:21","date_gmt":"2007-08-16T18:16:21","guid":{"rendered":"http:\/\/www.sahits.ch\/blog\/?p=116"},"modified":"2017-12-24T21:42:29","modified_gmt":"2017-12-24T20:42:29","slug":"eclipse-wizard-plugin-erstellen","status":"publish","type":"post","link":"http:\/\/sahits.ch\/blog\/blog\/2007\/08\/16\/eclipse-wizard-plugin-erstellen\/","title":{"rendered":"Eclipse Wizard Plugin erstellen"},"content":{"rendered":"<p>Eclipse stellt bereits einen Wizard zur Verf\u00fcgung, um eine Wizard zu erstellen:  \u00dcber <strong>New->Plug-in Development->Plug-in Project<\/strong> ein neues Projekt anlegen. Auf der Folgeseite habe ich dann als Target Eclipse (in Version 3.3) angegeben; das OSGi Framework habe ich nicht ganz durchschaut, jedenfalls war mein fertiges Plug-in dann nicht kompatibel. <a href='http:\/\/www.sahits.ch\/blog\/wp-content\/uploads\/2007\/08\/newplugin3v4.gif' title='new Plugin step 3 of 5'><img src='http:\/\/www.sahits.ch\/blog\/wp-content\/uploads\/2007\/08\/newplugin3v4.gif' alt='new Plugin step 3 of 5' \/><\/a><br \/>\nAuf der 3 Seite sind dann die Eckdaten zu vergeben: Plug-in ID \u00fcblicherweise der package name, Version ist selbsterkl\u00e4rend, der Plug-in Name hat nur bezeichnenden Charakter, sollte aber sprechend ausdr\u00fccken, wof\u00fcr das Plug-in steht. Der Plug-in Provider ist \u00fcblicherweise ein Teil der Webadresse z.B. eclipse.org, ibm.com oder sahits.ch. Der Activator wird ben\u00f6tigt, um das Plug-in zu aktivieren.<br \/>\n<a href='http:\/\/www.sahits.ch\/blog\/wp-content\/uploads\/2007\/08\/newplugin4v5.gif' title='new Plugin step 4 of 5'><img src='http:\/\/www.sahits.ch\/blog\/wp-content\/uploads\/2007\/08\/newplugin4v5.gif' alt='new Plugin step 4 of 5' \/><\/a><br \/>\nAuf der folgenden Seite kann zwischen den verschiedenen Plug-ins ausgew\u00e4hlt werden. F\u00fcr einen Wizard ben\u00f6tigen wir ein &#8222;Plug-in with multi-page editor&#8220;; Mit Editor ist letztentlich die Grafische Oberfl\u00e4che des Wizards gemeint wo die Eingaben gemacht werden, wie auf gerade dieser Schritt. Multi-page besagt lediglich, dass der Wizard aus mehreren Schritten bestehen kann, aber nicht muss.<br \/>\nAuf den beiden letzten Seiten werden dann die Informationen f\u00fcr die zu erstellenden Klassen gemacht.<br \/>\nNach dem Abschluss hat man bereits ein funktionsf\u00e4higes Plug-in. Um es auszutesten w\u00e4hlt man das Projekt an und <strong>Run As->Eclipse Application<\/strong>. Dies startet eine zweite Eclipse Instanz mit eigenem Workspace (ein Workspace kann gleichzeitig nur von einer Eclipse Instanz benutzt werden). Hier kann der Wizard \u00fcber <strong>New->Other->Other<\/strong> gestartet werden.<br \/>\nNun geht es daran, den Wizard mit eigenem Code zu f\u00e4llen. Ein guter Einstiegspunkt ist <a href=\"http:\/\/www.onjava.com\/pub\/a\/onjava\/2005\/02\/09\/eclipse.html\">Eclipse Plugins Exposed, Part 1: A First Glimpse<\/a><br \/>\nHat man die eigene Funktionalit\u00e4t integriert gibt es noch etwas Sch\u00f6nheitspflege zu machen:<\/p>\n<ol>\n<li>Wo in der Liste soll der Wizard erscheinen? Dies wird im plugin.xml im attribut <em>category<\/em> des tags <em>wizard<\/em> geregelt. Keine Angabe verfrachtet das Element in den Ordner other. Ein String bringt es in einem Ordner mit diesem Namen unter. Aber Achtung: Wenn bereits ein Ordner mit demselben Namen existiert, gibt aller Wahrscheinlichkeit nach einen zweiten Ordner. Soll der Wizard in einem anderen Ordner erscheinen ist hier die Klasse des Wizards einzutragen.<a href='http:\/\/www.sahits.ch\/blog\/wp-content\/uploads\/2007\/08\/plugin.gif' title='Plugin.xml'><img src='http:\/\/www.sahits.ch\/blog\/wp-content\/uploads\/2007\/08\/plugin.gif' width=\"500\" alt='Plugin.xml' \/><\/a><\/li>\n<li>Das Plug-in soll ja nicht nur einer Eclipse Instanz verf\u00fcgbar sein, sondern beim Starten verf\u00fcgbar sein. Dazu muss das Plug-in in das Verzeichnis eclipse\/plugins. Dies jedoch nicht in der Form, wie im Projekt. F\u00fcr das Plug-in wird das plugin.xml, ein jar-File der Klassen, das Verzeichnis icons und eventuell das Verzeichnis icons, zus\u00e4tzlich ben\u00f6tigte Bibliotheken und andere Resourcen ben\u00f6tigt.<br \/>\nDies gibt man im Plug-in oder Manifest Editor im Tab Build ein.<br \/>\n<a href='http:\/\/www.sahits.ch\/blog\/wp-content\/uploads\/2007\/08\/pluginbuild.gif' title='Plugin.xml Build'><img src='http:\/\/www.sahits.ch\/blog\/wp-content\/uploads\/2007\/08\/pluginbuild.gif' alt='Plugin.xml Build' \/><\/a><br \/>\nUnter Runtime Information gibt man den Namen des jar files an, das erstellt werden soll. In Binary Build wird angegeben, was alles im Build enthalten sein soll. Unter Extra Classpath Entries werden zus\u00e4tzliche Bibliotheken angegeben.<br \/>\nUm den aktuellen Build auszuf\u00fchren gibt es mehrere M\u00f6glichkeiten: 1. \u00dcber <strong>Export->Plug-in Development->Deployable plugins and features<\/strong>. Dies erstellt jedoch nur ein jar-file der Klassen mit dem angegebenen Namen in einem plugins Verzeichnis. 2. Wertvoller aber auch nicht ganz optimal ist der Weg \u00fcber ein Ant build script. Um das build.xml zu erhalten muss das plugin.xml angew\u00e4hlt sein, dann <strong>PDE Tools->Create Ant Build File<\/strong>. Dann kann zuerst das Default Target ausgef\u00fchrt werden, um das jar-File zu erhalten, sodann das target zip.plugin was ein Zip-Archiv des Ordners plugin-ID_Version erstellt und alles unter Binary Build angegebene enth\u00e4lt. Leider aber zus\u00e4tzlich zwei Zip-Files mit den Sourcen und das Verzeichnis bin. (Dies gilt zumindest f\u00fcr Eclipse 3.3). Also muss hier von Hand aussortiert werden.<\/li>\n<\/ol>\n<hr \/>\n<p>Das Ganze ist nicht ganz ohne deshalb hier noch ein paar Tipps:<\/p>\n<ul>\n<li>Das Plug-in wird nicht geladen\/aktiviert: Erst mal schauen ob das Plug-in verf\u00fcgbar ist unter <strong>Help->Ablut Eclipse SDK->Plug-in Details<\/strong>. Um das Problem zu eruieren kann es sinnvoll sein im Manifest das LacyLoad auf false zu setzen. Dies bewirkt, dass das Plug-in beim Start von Eclipse geladen wird. Ein Blick ins Error log (<strong>Window->Show View->Error log<\/strong>) enth\u00e4llt das Problem<\/li>\n<li>Im Error log erscheint die Meldung &#8222;plugin does not have valid identifier&#8220; oder &#8222;plugin does not have valid version&#8220;. Hier habe ich mir sagen lassen, dass dies mit einer JRE < 1.5 vorkommen kann. Mein Problem war ein anderes: Das Verzeichnis META-INF fehlte.<\/li>\n<\/li>\n<li>Wenn der Wizard gestartet werden soll erscheint die Fehlermeldung &#8222;Error loading new wizard &#8230;&#8220; Zum einen kann es sein, dass im plugin.xml die falsche Klasse angegeben ist, oder dass das jar-file im Classpath des Plug-ins fehlt (META-INF\/Manifest.mf)<\/li>\n<li>Wenn alles nichts n\u00fctzt Eclipse von der Konsole mit eclipse -clean starten. Wenn dies auch nicht funktioniert alles im Verzeichnis eclipse\/configuration\/.settings\/ l\u00f6schen.<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Eclipse stellt bereits einen Wizard zur Verf\u00fcgung, um eine Wizard zu erstellen: \u00dcber New->Plug-in Development->Plug-in Project ein neues Projekt anlegen. Auf der Folgeseite habe ich dann als Target Eclipse (in Version 3.3) angegeben; das OSGi Framework habe ich nicht ganz durchschaut, jedenfalls war mein fertiges Plug-in dann nicht kompatibel. Auf der 3 Seite sind dann &hellip; <a href=\"http:\/\/sahits.ch\/blog\/blog\/2007\/08\/16\/eclipse-wizard-plugin-erstellen\/\" class=\"more-link\"><span class=\"screen-reader-text\">\u201eEclipse Wizard Plugin erstellen\u201c <\/span>weiterlesen<\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[11,7,6],"tags":[99,304,301,12,25,13],"class_list":["post-116","post","type-post","status-publish","format-standard","hentry","category-eclipse","category-java","category-programmieren","tag-de","tag-eclipse","tag-java","tag-plugin","tag-tutorial","tag-wizard"],"_links":{"self":[{"href":"http:\/\/sahits.ch\/blog\/wp-json\/wp\/v2\/posts\/116","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/sahits.ch\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/sahits.ch\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/sahits.ch\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/sahits.ch\/blog\/wp-json\/wp\/v2\/comments?post=116"}],"version-history":[{"count":5,"href":"http:\/\/sahits.ch\/blog\/wp-json\/wp\/v2\/posts\/116\/revisions"}],"predecessor-version":[{"id":357,"href":"http:\/\/sahits.ch\/blog\/wp-json\/wp\/v2\/posts\/116\/revisions\/357"}],"wp:attachment":[{"href":"http:\/\/sahits.ch\/blog\/wp-json\/wp\/v2\/media?parent=116"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/sahits.ch\/blog\/wp-json\/wp\/v2\/categories?post=116"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/sahits.ch\/blog\/wp-json\/wp\/v2\/tags?post=116"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}