こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

JavaのJARファイルがうまく作成できません

Javaプログラムを作成したのですが、Jarファイルがうまく作成できません。
(Javaプログラムの作成経験はありますが、Jarファイル作成は初めてです)
どなたか解決方法をご教授下さい。

4つのソースプログラムがあります。
1) D:\Java\x\y\Random\a.java
2) D:\Java\x\y\Random\b.java
3) D:\Java\x\y\Random\c.java
4) D:\Java\x\y\Random\d.java

■1:Windowsのコマンドプロンプトで、
cd D:\Java
javac x\y\Random\*.java
と入力して、エラーが発生する事なく、コンパイルできました。
(D:\Java\x\y\Randomフォルダに、a.class, b.class, c.class, d.classファイルができました)

■2:次に(Windowsのコマンドプロンプトで)
java x.y.Random.myClass
と入力して、期待通り動作しました。

上記1)~4)のjavaソースプログラムは次のようにコーディングしています。
1) a.java
package x.y.Random;
・・・
class myClass {
public static void main(String args[]) {
・・・
}
}

2) b.java
package x.y.Random;
・・・

3) c.java
package x.y.Random;
・・・

4) d.java
package x.y.Random;
・・・
ここまではうまく行っており、問題ありません。

■3:
次のコマンドを実行すると、
jar cvf x.y.Random.jar x\y\Random
何もエラーは発生せず、以下のようなメッセージが10行程度表示され、
・・・を追加中です。(入=xx)(出=yy)(nn%収縮されました)
「x.y.RandomNum.jar」ファイルが作成されましたが、
このjarファイルをダブルクリックすると、以下のダイアログボックスが表示されます。

・ダイアログボックスのタイトル
Java Virtual Machine Launcher
・エラーメッセージ
Failed to load Main-Class manifest attribute from D:\Java\x.y.Random.jar

宜しくお願い致します。

投稿日時 - 2011-07-26 14:07:36

QNo.6900607

すぐに回答ほしいです

質問者が選んだベストアンサー

マニフェストファイルの記述ミスと思うのですが??

> Manifest-Version: 1.0
> Main-Class: Z.GenerateRandNums.CUI_GenerateRandNums

> Class-Path: x.y.RandomNum.jar     //この行を追加

> Created-By: 1.6.0_23 (Sun Microsystems Inc.)

x/y/RandomNum/b のクラスパスが通っていないのでは??
これで jarファイル を作成してみては!!

投稿日時 - 2011-07-26 19:48:35

お礼

回答ありがとうございました。
お蔭様で解決する事ができました。

投稿日時 - 2011-07-27 12:41:42

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

念のため判り易く例として、

packageクラスなどの場合
$ jar cf package.jar *.class //マニフェスト未使用
$ jar cf package.jar * //マニフェスト未使用(サブディレクトリ含む全て)

実行クラスの場合(実行クラスは変な言い方ですが要はメインクラス)
$ jar cmf test.mf test.jar *.class //マニフェスト使用
$ jar cmf test.mf test.jar * //マニフェスト使用(サブディレクトリ含む全て)

test.mf はマニフェストファイル

<test.mf> の例(シンプルですが)
Main-Class: ??? //メインのクラスとなるクラス名、これは必修
Class-Path: ./package.jar
SplashScreen-Image: splash.jpg

あなたの解説を見た限りでは、どういう仕組みかよく解らないのですが??
参考になれば!!

投稿日時 - 2011-07-26 15:24:32

補足

回答ありがとうございました。
現状以下の通りで、未だに解決しておりません。

4つのソースプログラムがあります
(1) D:\PRG\Java\x\y\RandomNum\RandomNumber.java
(2) D:\PRG\Java\x\y\RandomNum\b.java
(3) D:\PRG\Java\Z\CUI_GenerateRandNums.java
(4) D:\PRG\Java\Z\d.java

javac x\y\RandomNum\*.java コマンドで、(1)、(2)はコンパイルOK
javac Z\GenerateRandNums\*.java コマンドで、(3)、(4)はコンパイルOK

jar cf bin\x.y.RandomNum.jar x\y\RandomNum\*.class コマンドで
エラーメッセージ表示されずに完了
binフォルダに x.y.RandomNum.jar が作成されました

jar cmf Z\GenerateRandNums\GenerateRandNums.MF bin\Z.GenerateRandNums.jar Z\GenerateRandNums\*.class コマンドで
エラーメッセージ表示されずに完了
binフォルダに Z.GenerateRandNums.jar が作成されました

上記(1)、(2)のpackage文は、共に、package x.y.RandomNum; です。
上記(3)、(4)のpackage文は、共に、package Z.GenerateRandNums; です。

main(String args[])メソッドは、上記(3)ファイル内にコーディングしています。
class CUI_GenerateRandNums {
public static void main(String args[]) {
・・・
} // End of main()
} // End of class

マニフェストファイル GenerateRandNums.MF は、以下の内容(3行だけです)です。
Manifest-Version: 1.0
Main-Class: Z.GenerateRandNums.CUI_GenerateRandNums
Created-By: 1.6.0_23 (Sun Microsystems Inc.)


この状態で、java -jar bin\Z.GenerateRandNums.jar とコマンド入力すると、
コマンドプロンプト画面には、以下の内容が表示されました。

D:\PRG\Java>java -jar bin\Z.GenerateRandNums.jar
Exception in thread "main" java.lang.NoClassDefFoundError: x/y/RandomNum/b
Caused by: java.lang.ClassNotFoundException: x.y.RandomNum.b
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
Could not find the main class: Z.GenerateRandNums.CUI_GenerateRandNums. Program will exit.

D:\PRG\Java>

x.y.RandomNum.bにmainメソッドが見つからない、との意味だと思いますが、
上記(1)、(2)はサブルーチンなので、mainメソッドはありません。
(mainメソッドがあるのは、上記(3)ファイル内です)

色々と試行錯誤しているのですが、なかなか解決できません。
どうか、JARコマンド周辺をよくご存知の方は、解決方法をご教授下さい。

投稿日時 - 2011-07-26 19:05:36

マニフェストに Main-Class の設定がされてないだけですね。


http://java.sun.com/j2se/1.5.0/ja/docs/ja/guide/jar/jar.html

投稿日時 - 2011-07-26 14:23:25

お礼

回答ありがとうございました。
しかしご教授頂いたURLの文書は、実力不足で読みこなす事が出来ませんでした。今後は、実力を付けて読みこなせるよう努力して行きます。
ありがとうございました。

投稿日時 - 2011-07-27 12:40:47

あなたにオススメの質問