5分でEclipse PluginをGroovyで書くよー。

ぼーっとしていたらEclipse PluginをGroovyで書いてました!他のJVM言語でもEclipse Plugin書けるんです!
Eclipseはe4プロジェクトでJava以外の言語(例えばJavaScript)でもPluginの実装を実現しようと頑張ってますが、なんか3系でもできちゃった。

必要なもの(環境)

こっからはほぼ画像ペタペタ貼っているだけです。この通りに作業すれば同じようにプラグインが作れます。

ほいじゃ、実際に作っていくよー。

まずGroovyプロジェクトを作るー

プロジェクト名は「 eclipse-plugin-by-groovy 」って作りました。

GroovyプロジェクトをPluginプロジェクトにコンバート


MANIFEST.MFを編集してGroovyのライブラリやらEclipseのライブラリを追加するっす。



下記のダイアログが出るので、次のプラグインを追加するっす。

こんな感じで追加したらこんなんなります。

続いてメニューの拡張ポイントのテンプレートを追加するよー。


テンプレートの内容をカスタマイズするページが表示されるっす。そのままでOKっす。

テンプレートが出力されたので、Javaのファイルができました。groovyにするっす。



ソースを編集するよー



完全版のソースコードはこんな感じ。

package eclipsepluginbygroovy.handlers;

import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.handlers.HandlerUtil;
import org.eclipse.jface.dialogs.MessageDialog;

class SampleHandler extends AbstractHandler {
	/**
	 * The constructor.
	 */
	SampleHandler() {
	}

	/**
	 * the command has been executed, so extract extract the needed information
	 * from the application context.
	 */
	def execute(ExecutionEvent event) throws ExecutionException {
		def window = HandlerUtil.getActiveWorkbenchWindowChecked(event);
		MessageDialog.openInformation(
				window.getShell(),
				"eclipse-plugin-by-groovy",
				"Hello, Eclipse world");
		return null;
	}
}
実行してみよー。

Eclipse Applicationを追加するよー。左側のEclipse Applicationを選んで、ノートに+がついたようなアイコンをクリック

Eclipse Plugin by Groovy」と言う感じでNameをつけてあげよう。Macユーザーの方は、Arguments(引数)タブを開いて、VM Arguments(VM引数)に-d32を追加してください。そんでOKを押してみる。

するともう一つEclipseが立ち上がるので、ツールバーのこのボタンを押してみよー。

うまくいくとこのダイアログが出るよー。


おしまい。

今回はメニューやツールバーのテンプレートを使いましたが、ビューやらエディタやらも各拡張ポイントに対応するクラスを指定すれば同様に動作するはずです。

種明かし

と書いてみましたが、特に種はありません。Groovy Eclipse環境下では、groovyのソースコードがコンパイルされclassファイルになります。groovyのクラスファイルは、実行時にgroovyのランタイムが必要ですが、プラグインの実行時に依存関係にgroovyのライブラリを含んでいるため、意図したとおりクラスが実行できるのです。

これってば他のJVM言語でもうまくいくのではないか!?

Groovyの場合、Javaソースコード変換をするプラグインがあるのでさくっと行きますが、他のJVM言語でも依存ライブラリにその言語のライブラリを指定すれば動くはず。近いうちにScalaとかJRubyとか試してみたいと思います。それができれば、ポリグロット(多言語)eclipse環境が実現されますね。ではではー。