« ◆2001年宇宙の旅; BDとNHKの画質比較 | トップページ | ◇通りすがりのイマソガリ »

◇JAVAアプリをクリックで実行可能とする

不思議な程知られていないのがJAVAで作成されたプログラムをクリックで実行する 方法です。

JAVAで作られたプログラムはjarファイルにまとめ、jarファイルにマニフェストを設定 することにより、jarファイルのクリックでの実行が可能となります。

ただし、このとき標準で実行されるのはjavaコマンドでは なく、標準入出力がコンソールに結び付けられないjavaw コマンドとなります。
このため、標準出力に出力するプログラムでは出力の 確認ができません。
例えば、次のようなプログラムはjavawで実行しても 意味がありません。

public class Hello{
   public static void main(String[] args_){
      System.out.println("Hello world");
      }
   }

jarファイルの起動プログラムをjavaに変えただけでは 実行後、結果が消えてしまいます。
また、jarの実行がjavawでなくなることも好ましいとは いえません。
単純な解決法として、jarを別名(例えば.jawなど)にして、 起動プログラムを「javaを起動するバッチファイル」 にする方法があります。

 マニフェストファイルの書き方

jarファイルにマニフェストを設定するためには予めマニフェスト ファイルを作成しなくてはなりません。
マニフェストファイルにはキーワード"Main-Class:"の後ろに main関数を持つクラス名を書きます。忘れてならないのが その後ろに改行を入れることです。

Main-Class: Hello
Class-Path: ../../lib/myLib1.jar ../../lib/myLib2.jar
これを例えばHello.mfといった名前で作成します。

注意:jar化したものをjava -jar XXX.jarで起動すると環境変数CLASSPATH を参照してくれません。なぜそのような仕様なのかは分かりません。
Class-Pathによる参照が必要な場合はマニフェストファイル上に Class-Path:で指定する必要があります。
指定しないと実行時に"NoClassDefFoundError"出ます。
注意の中の注意:複数並べる場合間に入れるのは ;ではなく空白であることに注意してください。なぜそのような 仕様なのかは分かりません。
結局のところバッチファイル、シェルスクリプトが一番確実ということ でしょう。

 マニフェスト付きjarファイルにする

javaソースのコンパイル法は特に変わりはありません。
マニフェスト付きのjarファイルを作成するにはjarコマンドに -cmfオプションを指定します。

jar -cmf Hello.mf Hello.jar Hello.class
形式は jar -cmf マニフェストファイル jarファイル クラスファイル群 です。

コンソール出力を必要としない場合、これで.jarファイルのクリック起動 が可能となります。

 コンソールウィンドウ出力可とするシステム設定

(これはシステムの設定ですので、一度だけやっておけばよい)
ここではファイルの添え字を.jawとします。
まず次の内容のバッチファイルを作成します。

@java -jar %*
@pause
ここではこのファイルをrun_jaw.batとします。混乱を避けるため Program Files下に置くことが望ましいと思います。
例えば"C:\Program Files\Hiura\run_jaw\run_jaw.bat"
これを、.jawに割り当てます。

割り当てるには、一旦適当な.jawファイルを作成し、プロパティ の
「ファイルの種類 JAWファイル プログラム [変更]」->[参照]
で 実行ファイル(ここでは"C:\Program Files\Hiura\run_jaw\run_jaw.bat") を指定します。

以降は.jarを.jawに名前を変えればこのバッチファイルが動きます。

 コンパイルしjawを作るバッチ

次のようなバッチファイルを作成し、javaソースをコンパイルし jawの作成を行います。(コマンドラインから毎回手で打つのは 避けるべきです)

set p=Hello
javac %p%.java
jar -cmf %p%.mf %p%.jar %p%.class
jar -tf %p%.jar
del /q %p%.jaw
ren %p%.jar %p%.jaw
pause
例えばHello_mk.batといった名前で作成します。(antなどを使用する 方が望ましいのですがそれはまた)

 実際に動くファイル

単純なものですが、実際に動作させたものを載せます。 右クリック-> 「対象をファイルに保存」でダウンロードできます。

run_jaw.batはProgram Files下などに置き、他はどこか一つのフォルダ に置いてください。
Hello_mk.batをクリックするとHello.jawが作成 されます。
.jawの起動プログラムとしてrun_jaw.batを割り当ててあると Hello.jawをクリックすると、DOS窓が開きHello Worldと表示 されます。

 ###

jawはジョーと読みます。
立て、立つんだジョー!
違います。ジョーズのジョーです。
上手と書いて「かみて」と読みます。
JAWSと書いて「咬み手(かみて)」と読みます。ウソです。

 ### ドラッグで実行

残念ながらjarファイルに対象ファイルをドラッグして動かすことはできません。
batファイルも準備した方がいいかも知れませんね。
例えばTest.jarを動かす.batをTest.jarと同じフォルダに置くとして次のように記述 します。
java -jar "%~dp0\Test.jar" %*
pause
%~dp0は起動されたバッチファイル自身のドライブ名とフォルダ部パス名を取り出す 記述です。

 ###

(2009/9/7) Class-Path:の注意追加。

|

« ◆2001年宇宙の旅; BDとNHKの画質比較 | トップページ | ◇通りすがりのイマソガリ »

トラックバック


この記事へのトラックバック一覧です: ◇JAVAアプリをクリックで実行可能とする:

« ◆2001年宇宙の旅; BDとNHKの画質比較 | トップページ | ◇通りすがりのイマソガリ »