プロが教えるわが家の防犯対策術!

Eclipseで、何も無いウインドウを開くというだけのアプリケーションを作ろうとしました。
ライブラリに、
org.eclipse.swt.win32.win32.x86_3.2.1.v3235.jar
を追加しております。

配布できる形式にしたいため、Jarファイルを作成しました。
プロジェクトにMETA-INFというフォルダを作成し、そこに「Manifest.mf」というファイルを作成し、以下のように記述しました。

Manifest-Version: 1.0
Class-Path: "C:\eclipse\plugins\org.eclipse.swt.win32.win32.x86_3.2.1.v3235.jar"
Main-Class: view.TestWindow

ちなみに、「view.TestWindow」というのがmainメソッドのあるクラスの名前です。

JARファイルをエクスポートして、コマンドライン上から以下のように入力しました。

> java -jar TestWindow.jar

結果は、以下のようなエラーが表示されました。

Failed to load Main-Class manifest attribute from
TestWindow.jar

多分、「Main-Class」の情報がマニフェストファイルから見つからないと言っているんだと思いますが、Eclipse上からエクスポートする際にはちゃんと場所を指定しています。何が問題なのか解りません。

将来的には、違うマシン上で動作するアプリケーションを作りたいと思っているのですが、最初でいきなり躓いてしまいました。
どなたか教えて頂けないでしょうか。

A 回答 (3件)

swtのライブラリを使用するためのマニフェストファイルの書き方について、過去に調査、回答いたしました。



http://okwave.jp/qa2457294.html

関連知識としてご参考いただければ幸いです。
    • good
    • 0
この回答へのお礼

先にこちらを参照するべきでした。
ありがとうございました。

お礼日時:2006/11/30 11:32

Class-Path: にeclipseのパスしか指定してないから、カレントは探さずに、そこだけ探して


「main()関数を持つクラスを発見できない」と返ってくるのでしょう。
No1の方の回答のように、コマンドラインで -classpath を指定すれば実行できますけど、それだと、ダブルクリックでの実行は出来ません。

javaのドキュメントによれば、ここには「相対 URL を指定する。URL は 1 つ以上の空白で区切る。」
とあるので、「./」 でカレントパスを意味し、この指定により、自分のアーカイブ内のクラスを探します。
Class-Path: ./ ./xxx.jar

あと、他のPC(eclipseが入っていない)で実行することを考えるなら、eclipseのライブラリもそのアーカイバに含めるか、再配布が許されていないなら、使わずに作る必要があるでしょう。
windowを開くだけのプログラムに、そこまでのライブラリが必要とは思えないけど。
    • good
    • 0
この回答へのお礼

助かりました。
おかげでどうにか実装できました。
本当にありがとう御座います。

お礼日時:2006/11/30 11:32

Eclipseで、配布可能なJARファイルを作成する方法


 私は、Eclipse2.xを使ってます。
1.プロジェクト右クリック⇒エクスポート⇒JARファイル
 生成されたクラス・ファイルとリソースをエクスポートにチェックON

 エクスポート先(JARファイルの出力先)を選択
 (ここでJARファイル名も決定します。)

 終了を押下

でJARファイルが出来ると思います。

ちなみに、コマンドラインから作成する方法は
D:\>cd D:\java\project01\classes
 classファイルのあるフォルダ(ここではD:\java\project01\classes)へ移動し

D:\java\project01\classes>jar cvf project.jar *
マニフェストが追加されました。
hoge.class を追加中です。(入 = 0) (出 = 0)(0% 格納されました)

D:\java\project01\classes>dir
hoge.class project.jar 

JARファイルの中身を確認するには
オプション tvf を使用します。
D:\java\project01\classes>jar tvf project.jar
0 Mon Nov 27 14:55:56 JST 2006 META-INF/
71 Mon Nov 27 14:55:56 JST 2006 META-INF/MANIFEST.MF
0 Mon Nov 27 14:54:50 JST 2006 hoge.class

JARファイルに含まれるクラスを実行するには
D:\java\project01\classes>java -classpath project.jar hoge
hoge!

#hoge.java
public class hoge {
public static void main(String[] args) {
System.out.println("hoge!");
}
}
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!