こんにちは!フリーランスの長野です。
Java Web Startって使ってますか?
Java Web Startを使うと、WebサイトからJavaのアプリケーションをダウンロードして実行することができます。
この記事では、Java Web Startについて
・Java Web Startとは
・Java Web Startのインストール
という基本的な内容から
・Java Web Startのサンプル
・起動しない場合の対策
など実用的な内容についても解説していきます。
今回はJava Web Startについて、わかりやすく解説します!
なお、Javaの記事については、こちらにまとめています。
Java Web Startとは
Java Web StartとはJavaのアプリケーションをWebサイトなどから自動ダウンロード、自動インストール、自動アップデートして実行できる仕組みのことです。
Java Web Startを実装するにはJNLPと呼ばれる特別なXMLファイルを作成する必要があります。
JNLPはJava Network Launching Protocolの略です。
現時点(2018/7/10)でのJavaの最新バージョンはJava10ですが、Java Web StartはJava11からは搭載されなくなります。
Webブラウザがセキュリティ脆弱対応でプラグイン機構をなくす方向で動いていることが理由です。
Java Web StartもJava9で廃止予定とされていましたが、いよいよJava11からは搭載されなくなります。
Java Web Startのインストール
Java 5.0以降では、Java Web StartはJava Runtime Environment(JRE)に含まれています。
JREをインストールすると、Java Web Startも自動的にインストールされます。
JREについてはこちらで詳しく解説していますので、ぜひ参考にしてください。
Java Web Startのサンプル
それではJava Web Startの使い方についてサンプルコードを使って説明します。
サンプルアプリの作成
まずはJavaのサンプルアプリを用意しましょう。
ここではSwingを使ったアプリを用います。
SwingSample.java:
import java.awt.BorderLayout; import java.awt.EventQueue; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.border.EmptyBorder; public class SwingSample extends JFrame { private JPanel contentPane; /** * Launch the application. */ public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { try { SwingSample frame = new SwingSample(); frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } }); } /** * Create the frame. */ public SwingSample() { setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBounds(100, 100, 450, 300); contentPane = new JPanel(); contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); contentPane.setLayout(new BorderLayout(0, 0)); setContentPane(contentPane); JLabel lblNewLabel = new JLabel("New label"); contentPane.add(lblNewLabel, BorderLayout.CENTER); lblNewLabel.setText("Hello Swing!"); } }
Swingについてはこちらで詳しく解説していますので、ぜひ参考にしてください。
jarファイルへの署名
Javaアプリはjarファイルに圧縮する必要がありますが、Java Web Startでアプリを配布するには署名が必要です。
まずは先ほどのサンプルアプリをjarファイルに圧縮しましょう。
jarファイルに圧縮する際にマニフェストファイルを作成しますが、マニフェストファイルで「Permissions: all-permissions」を設定しておきます。
manifest.mf
Permissions: all-permissions Main-Class: SwingSample
jarファイルを作成するコマンドは下記のとおりです。
javac SwingSample.java jar -cvfm sample.jar manifest.mf *.class
jarファイルの作成については、こちらで詳しく解説していますので、ぜひ参考にしてください。
このsample.jarに署名を追加していきます。
ここでは自己署名を追加します。
自己署名とは自分で自分自身を証明する証明書のことです。
Javaのkeytoolコマンドを使ってキーストアを作成します。
keytool -genkey -keystore myKeyStore -alias myAlias
パスワードを設定したら、姓名、組織名、地方名、国番号などを入力し、最後に「よろしいですか?」と問われますので「はい」と入力し「Enter」キーを押します。
myKeyStoreファイルが作成されます。
キーストアが作成されたら、Javaのjarsignerコマンドを使ってjarを署名します。
jarsigner -keystore myKeyStore sample.jar myAlias
キーストアのパスワードを入力すると、jarが署名されます。
これでJavaアプリのjarファイルの作成は完了です。
MIMEタイプの設定
Java Web StartのMIMEタイプを使用できるようにWebサーバーを設定します。
拡張子「.jnlp」を持つすべてのファイルが「application/x-java-jnlp-file」MIMEタイプとして設定されるようにします。
MIMEタイプを追加する方法は、使用するWebサーバーごとに異なります。
例えばApache Webサーバーの場合、「.mime.types」設定ファイルに次の行を追加します。
application/x-java-jnlp-file JNLP
JNLPファイルの作成
それではJNLPファイルを作成しましょう。
JNLPファイルはXMLドキュメントです。
ここで使うJNLPファイルは以下のとおりです。
sample.jnlp:
<?xml version="1.0" encoding="utf-8"?> <jnlp spec="6.0+" codebase="http://localhost/JWSsample" href="sample.jnlp"> <information> <title>Java Web Start Sample</title> <vendor>Samurai Engineer</vendor> <offline-allowed/> </information> <security> <all-permissions/> </security> <resources> <j2se version="1.6+" /> <jar href="sample.jar"/> </resources> <application-desc main-class="SwingSample"/> </jnlp>
jnlpタグ内でcodebase属性にJavaアプリを配布するWebサイトのアドレスを指定し、href属性にJNLPファイルを指定します。
informationタグ内ではJavaアプリの情報を指定します。
securityタグ内ではJavaアプリのアクセス権を設定しています。
resourcesタグ内のjarタグのhref属性でJavaアプリのjarファイルを指定しています。
application-descタグのmain-class属性でJavaアプリのmainメソッドを含むクラス名を指定しています。
JNLPファイルの作成については、公式サイトを参考にしています。
https://docs.oracle.com/javase/jp/7/technotes/guides/javaws/developersguide/syntax.html
HTMLファイルの作成
Javaアプリを配布するWebサイトのHTMLファイルを作成します。
今回使用しているHTMLファイルは次のとおりです。
index.html:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Java Web Start サンプル</title> </head> <body> <p>JWS Sampleへのリンクです</p> <a href="sample.jnlp">JWS Sample</a> </body> </html>
sample.jnlpファイルにリンクしています。
Webサーバーへのデプロイ
作成したsample.jarファイル、sample.jnlpファイル、index.htmlファイルをWebサーバー上の同じファイルにデプロイメント(配置)します。
今回はローカルサーバーのルートディレクトリ直下にJWSsampleフォルダを作成し、そのフォルダ内にデプロイメントしました。
ブラウザでWebアドレスを「http://localhost/JWSsample/index.html」と入力するとWebサイトが表示されます。
JWS Sampleのリンクをクリックすると、Javaアプリがダウンロードされます。
Javaコントロール・パネルでの設定
ダウンロードされるJavaアプリ「sample.jnlp」をダブルクリックすると通常はアプリが起動しますが、今回は自己署名付きのJavaアプリですので、次のようなウィンドウが現れアプリを起動することができません。
Java 7 Update 51以降、自己署名付きのJavaアプリはそれを配布するサイトを例外サイト・リストに含めなければ起動できません。
https://java.com/ja/download/help/jcp_security.xml
配布するサイトを例外サイト・リストに含めるにはJavaコントロール・パネルで設定をする必要があります。
ここで紹介するJavaコントロール・パネルはJava10のモノを使用しています。
Javaコントロール・パネルの「Webの設定」から「例外サイト・リスト」タブで「追加」ボタンをクリックします。
Webアドレス(ここでは「http://localhost」)を入力して再度「追加」ボタンをクリックすると場所のリストに掲載されます。
「適用」もしくは「OK」ボタンをクリックして設定は終了です。
これでJavaアプリ「sample.jnlp」をダブルクリックするとアプリが起動します。
またJavaコントロール・パネルの「Webの設定」から「Javaキャッシュ・ビューア」タブでリストにJavaアプリが掲載されます。
Javaアプリをクリックして選択し、実行ボタンをクリックしてもアプリを起動させることができます。
起動しない場合の対策
起動しないもしくは上手く表示されないなどの不具合とその対策については以下のとおりです。
JNLPがXMLで表示される
JNLPファイルがブラウザで見るとXMLで表示されるという場合は、MIME設定がうまく行っていません。
WebサーバーのMIME設定をもう一度確認しましょう。
Javaアプリが起動しない
Javaアプリがダウンロードされたが起動しないという場合は、署名がされていない場合があります。
Javaコントロール・パネルで例外サイト・リストに含めるか、または署名を追加するようにしましょう。
まとめ
今回はJava Web Startについて解説してきましたが、いかがでしたか?
Java Web StartはJavaのアプリケーションをWebサイトで配布することができます。
Java Web Startを利用するためには、JNLPファイルを作成する必要があります。
使いこなすことができるように、この記事を何度も参考にして下さいね!