Eclipse RCPアプリケーションをJava Web Startで配布する手順

題名の通り、Eclipse RCPアプリケーションをJava Web Startで配布する手順を記述します。Eclipse RCPとは何ぞや? という方は、以下のページを参照してください。

Eclipse RCPをJava Web Startで配布する方法は、Eclipse for RCP/Plug-in Developersパッケージのヘルプの、

Platform Plug-in Developer Guide
    Programmer's Guide
        Packaging and delivering Eclipse based products
            Deploying eclipse based application with Java Web Start

に載っています。このエントリーは、このヘルプを参考にしています。

ポイント

  • Eclipse for RCP/Plug-in Developers(またはEclipse for Java EE Developers)を使用します。
  • プラグイン(RCPアプリケーション)を作成します。
  • Product Configurationを作成します。
  • フューチャーを作成します。
  • フューチャーにorg.eclipse.equinox.launcherプラグインを追加します。
  • 電子証明書を作成します。
  • フューチャーをDeployable featuresでエクスポートします。
  • jnlpファイルを作成します。
  • Webサーバにデプロイします。

次から具体的な手順を説明します。

Eclipseをインストール

eclipse.orgからEclipseをダウンロードして、インストール(zip展開)します。2009/11/11時点の最新バージョンは3.5(Galileo)になります。パッケージはRCP/Plug-in Developersを使用します。Java EE Developersでも問題はありませんが、RCP/Plug-in Developersの方が詳細なヘルプが載っています。

Eclipse RCPアプリケーションを作成(fooプラグインを作成)

適当にEclipse RCPアプリケーションを作成します。このプロジェクトを仮にfooプラグインとします。fooプラグインを作成する手順を次に記述します。

メニューのFile > New > Projectをクリックします。New Projectウィザードが開きます。

Plug-in Development > Plug-in Projectを選択して、Nextをクリックします。

Project nameにfooを入力して、Nextをクリックします。


Would you like to create a rich client application?でYesを選択して、Nextをクリックします。

RCP Mail Templateを選択して、Finishをクリックします。

Yesをクリックします。

fooプロジェクトが作成されます。

試しにLaunch an Eclipse applicationをクリックしてみます。

RCP Productというタイトルのウィンドウが開きます。これが、今作成したfooプラグインです。

Product Configurationを作成

このままだとただのプラグインなので、Product Configurationを作成して製品化(語弊がありますが…)します。

メニューのFile > New > Otherをクリックします。Newウィザードが起動します。

Plug-in Development > Product Configurationを選択して、Nextをクリックします。

以下のように設定して、Finishをクリックします。

Enter or select the parent folder foo
File name foo.product
Use an existing product foo.product

foo.productファイルが作成されます。これが、製品化のための設定ファイルです。必要な情報は全て設定済みです。Dependenciesにも必要なプラグインが設定済みになっています。


試しにLaunch an Eclipse applicationをクリックして、fooプラグインが起動することを確認します。

ちなみに、Product Configurationからプラグインをエクスポートすると、配布可能なスタンドアロン・アプリケーションが作成できます。

フューチャーを作成

関連するプラグインをまとめて配布するため、フューチャーを作成します。このフューチャーを仮にfooフューチャーとします。fooフューチャーはfooプラグインとその関連プラグインをまとめます。fooフューチャーを作成する手順を次に記述します。

メニューのFile > New > Projectをクリックします。New Projectウィザードが開きます。

Plug-in Development > Feature Projectを選択して、Nextをクリックします。

Project nameにfoo.featureを入力して、Nextをクリックします。

Initialize from a launch configurationのfoo.productを選択して、Finishをクリックします。(Initialize from a launch configurationの選択肢が表示されない場合、fooプラグインを1度起動してみてください)

foo.featureプロジェクトが作成されます。必要な情報は設定済みです。Plug-insにも必要なプラグインが設定済みになっています。



フューチャーにorg.eclipse.equinox.launcherプラグインを追加

フューチャーにorg.eclipse.equinox.launcherプラグインを追加します。Java Web Startのランチャーになるようです。


電子証明書を作成

Eclipse RCPアプリケーションをJava Web Startで配布するためには、jnlpを与える必要があります。このため、電子証明書が必要となります。まじめに電子証明書を作る場合は複雑な手順が必要となりますが、ここではいわゆるオレオレ証明書を作成、使用することとします。

電子証明書を作成するには、keytoolプログラムを使用します。keytoolプログラムについては、以下を参照してください。

具体的には、以下のように使用します。

>keytool -genkey -alias foo -keystore D:\temp\foo.keystore
キーストアのパスワードを入力してください:
姓名を入力してください。
  [Unknown]:
組織単位名を入力してください。
  [Unknown]:
組織名を入力してください。
  [Unknown]:
都市名または地域名を入力してください。
  [Unknown]:
州名または地方名を入力してください。
  [Unknown]:
この単位に該当する 2 文字の国番号を入力してください。
  [Unknown]:
CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown でよろしいですか?
  [no]:  yes

<foo> の鍵パスワードを入力してください。
        (キーストアのパスワードと同じ場合は RETURN を押してください):

フューチャーをエクスポート

フューチャーをエクスポートします。foo.featureプロジェクトを右クリックして、Exportをクリックします。Exportウィザードが開きます。

Plug-in Development > Deployable featuresを選択して、Nextをクリックします。

次のように入力して、Finishをクリックします。

Destination Directoryに出力先フォルダを入力します。
Options Package as individual JAR archivesをチェックします。このとき、Generate metadata repository、および、Categorize repositoryはアンチェックします(アンチェックしないとjnlpが生成されません。注意)。
JAR Signing Sign the JAR archives using a keystoreをチェックして、Keystore location、Keypass、Alias、Passwordを入力します。
Java Web Start Create JNLP manifests for the JAR archivesをチェックして、Site URL、JRE versionを入力します。




エクスポートには少し時間がかかります。完了すると、出力先フォルダに以下のようなファイルが作成されます。

foo-site/
+---features/
|       foo.feature_1.0.0.200911111530.jar
|       foo.feature_1.0.0.200911111530.jnlp
+---plugins/
        com.ibm.icu_4.0.1.v20090822.jar
        foo_1.0.0.200911111530.jar
        javax.servlet_2.5.0.v200806031605.jar
        org.eclipse.core.commands_3.5.0.I20090525-2000.jar
        org.eclipse.core.contenttype_3.4.1.R35x_v20090826-0451.jar
        org.eclipse.core.databinding.observable_1.2.0.M20090902-0800.jar
        org.eclipse.core.databinding.property_1.2.0.M20090819-0800.jar
        org.eclipse.core.databinding_1.2.0.M20090819-0800.jar
        org.eclipse.core.expressions_3.4.100.v20090429-1800.jar
        org.eclipse.core.jobs_3.4.100.v20090429-1800.jar
        org.eclipse.core.runtime.compatibility.auth_3.2.100.v20090413.jar
        org.eclipse.core.runtime.compatibility.registry_3.2.200.v20090429-1800.jar
        org.eclipse.core.runtime_3.5.0.v20090525.jar
        org.eclipse.equinox.app_1.2.0.v20090520-1800.jar
        org.eclipse.equinox.common_3.5.1.R35x_v20090807-1100.jar
        org.eclipse.equinox.launcher_1.0.201.R35x_v20090715.jar
        org.eclipse.equinox.preferences_3.2.300.v20090520-1800.jar
        org.eclipse.equinox.registry_3.4.100.v20090520-1800.jar
        org.eclipse.help_3.4.1.v20090805_35x.jar
        org.eclipse.jface.databinding_1.3.1.M20090826-0800.jar
        org.eclipse.jface_3.5.1.M20090826-0800.jar
        org.eclipse.osgi.services_3.2.0.v20090520-1800.jar
        org.eclipse.osgi_3.5.1.R35x_v20090827.jar
        org.eclipse.swt.win32.win32.x86_3.5.1.v3555a.jar
        org.eclipse.swt_3.5.1.v3555a.jar
        org.eclipse.ui.workbench_3.5.1.M20090826-0800a.jar
        org.eclipse.ui_3.5.1.M20090902-1000.jar

ほとんどがjarファイルですが、featuresフォルダに1つjnlpファイルが作成されています。このjnlpファイルですが、jnlp/information/vendor要素が抜けています。テキストエディタでjnlpファイルを開いて、必要な要素を追加します。

jnlpファイルを作成

エクスポートでjnlpファイルが作成されましたが、これだけではJava Web Startを起動できません。メインのjnlpファイルを作成する必要があります。内容は以下のような感じです。

<?xml version="1.0" encoding="UTF-8"?>
<jnlp spec="1.0+" codebase="http://localhost:8080/foo-site/" href="foo.jnlp">
    <information>
        <title>foo RCP Application</title>
        <vendor>u6k.yu1@gmail.com</vendor>
    </information>
    <security>
        <all-permissions />
    </security>
    <application-desc main-class="org.eclipse.equinox.launcher.WebStartMain">
        <argument>-nosplash</argument>
    </application-desc>
    <resources>
        <jar href="plugins/org.eclipse.equinox.launcher_1.0.201.R35x_v20090715.jar" />
        <extension name="foo.feature" href="features/foo.feature_1.0.0.200911111530.jnlp" />
        <property name="osgi.instance.area" value="@user.home/.foo" />
        <property name="osgi.configuration.area" value="@user.home/.foo" />
        <property name="eclipse.product" value="foo.product" />
    </resources>
    <resources os="Mac">
        <j2se version="1.5+" java-vm-args="-XstartOnFirstThread" />
    </resources>
    <resources os="Windows">
        <j2se version="1.4+" />
    </resources>
    <resources os="Linux">
        <j2se version="1.4+" />
    </resources>
</jnlp>
  • jarファイルやjnlpファイルのファイル名は、エクスポートした時間などで変わります。
  • osgi.instance.area、osgi.configuration.areaは、ワークスペースの位置になります。
  • eclipse.productは、起動するProduct Configurationになります。これを間違えると、Java Web Startのダウンロードは終わるけど何も起きないという不思議な現象に陥ってしまうので注意。

このjnlpファイルをfoo-siteフォルダに配置します。必要ならhtmlファイルも作成します。

foo-site
    foo.jnlp

Webサーバに配置

以上でWebサーバに配置する準備ができたので、Webサーバに配置します。配置したら、Webブラウザからjnlpファイルを開きます(htmlからリンクを張っているなら、そのリンクをクリックします)。

ファイルをダウンロードしています。なお、jnlpファイルが間違えていると、この段階でエラーとなります。また、何らかの理由でダウンロードに失敗する可能性もあります。

オレオレ証明書なので、警告が表示されます。ローカルでの動作確認ですし、実行をクリックします。

アプリケーションが起動しました。おめでとう!