Eclipseのプラグイン開発のプラグインアーカイブの解凍方法。
プラグインでは、ファイル(jarファイル等)をプラグインアーカイブに含めることが出来る。
しかし(デフォルトでは)実際にプラグインが配布されて使われる時には そのファイルはアーカイブ内に入っているので、そのまま普通のファイルとして使うことは出来ない。
という訳で、フィーチャーを作る際のオプションでインストール後にアーカイブを解凍させることが出来る。(by ashigeruさん)
インストール後にアーカイブを解凍させる方法。
feature.xmlが以下のように変わる(unpackの指定が無くなる)。
<plugin id="jp.hishidama.eclipse_plugin.dmdl_editor" download-size="0" install-size="0" version="0.0.0" unpack="false"/> |
→ |
<plugin id="jp.hishidama.eclipse_plugin.dmdl_editor" download-size="0" install-size="0" version="0.0.0"/> |
解凍される場所は、プラグインのインストール先になる。
例:「C:\eclipse\plugins\jp.hishidama.eclipse_plugin.dmdl_editor_1.0.1.201302192127」
で、中を見てみると、プラグインのプログラムのファイルまで解凍されて、classファイル群が作られている^^;
これはちょっと良くないので、classファイルは別途jarファイル化しておいた方が良い。(プラグインの機能でjarファイル化することが出来る)
プラグインのclassファイル群をアーカイブ化する方法。
.
」が追加される。(一覧に何も無いときは、「.
」が省略されているという扱いらしい).
」は要らないので、)「.
」を選択して「除去」ボタンを押す。output..
」とか「javacSource..
」とかのピリオドが2つある指定「..
」があるので、「.plugin.jar
」に置換する。
output.. = classes/ bin.includes = plugin.xml,\ META-INF/,\ icons/,\ plugin.jar javacSource.. = 1.6 javacTarget.. = 1.6 javacDefaultEncoding.. = UTF-8 source.plugin.jar = src/ |
→ |
output.plugin.jar = classes/ bin.includes = plugin.xml,\ META-INF/,\ icons/,\ plugin.jar javacSource.plugin.jar = 1.6 javacTarget.plugin.jar = 1.6 javacDefaultEncoding.plugin.jar = UTF-8 source.plugin.jar = src/ |
これで、プラグインをビルドすると「plugin.jar」が作られる。
一番最初の状態のbuild.propertiesは以下のようになっている。
source.. = src/ output.. = classes/ bin.includes = plugin.xml,\ META-INF/,\ icons/ javacSource.. = 1.6 javacTarget.. = 1.6 javacDefaultEncoding.. = UTF-8
「source..
」という指定は、“カレントディレクトリー「.
」のソース”というような意味になっているらしい。
つまり、「プロパティー名.
対象」という指定の仕方のようだ。
普通だったら「対象.
プロパティー名」という命名になっていて欲しいところだが、対象には「plugin.jar」の様にピリオド入りのファイル名が指定できるので、逆になっているのかもしれない。
したがって、
「source.plugin.jar = src/」は、「plugin.jarを作る為のソースディレクトリーはsrc/である」
「output.plugin.jar = classes/」は、「plugin.jarを作る為の(コンパイルの)出力ディレクトリーはclasses/である」
「javacSource.plugin.jar = 1.6」は、「plugin.jarはjavac 1.6で作成する」
というような意味になるのだろう。
プラグインアーカイブに含まれたファイルは、“バンドルされたリソース”としてアクセスすることが出来る。
プラグインプロジェクト内の「resource/zzz.properties」というファイルを使用する例。
まず、マニフェストエディターの「ビルド」タブの「バイナリー・ビルド」で「resource/zzz.properties」にチェックを付け、アーカイブに含まれるようにしておく。
それからソースをコーディングする。
import java.net.URL; import org.eclipse.core.runtime.FileLocator; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.Path; import org.osgi.framework.Bundle;
Bundle bundle = Activator.getDefault().getBundle(); IPath path = Path.fromPortableString("resource/zzz.properties"); URL bundleUrl = FileLocator.find(bundle, path, null); URL url = FileLocator.resolve(bundleUrl);