-PR-
  • すぐに回答を!
  • 質問No.6900607
解決
済み

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

  • 閲覧数933
  • ありがとう数2
  • 気になる数0
  • 回答数3
  • コメント数0

お礼率 40% (2/5)

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

宜しくお願い致します。
  • 回答数3
  • 気になる数0

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

  • 回答No.3
レベル8

ベストアンサー率 61% (19/31)

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

> 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ファイル を作成してみては!!
お礼コメント
heureuse

お礼率 40% (2/5)

回答ありがとうございました。
お蔭様で解決する事ができました。
投稿日時 - 2011-07-27 12:41:42
  • ありがとう数0
-PR-
-PR-

その他の回答 (全2件)

  • 回答No.1

マニフェストに Main-Class の設定がされてないだけですね。 http://java.sun.com/j2se/1.5.0/ja/docs/ja/guide/jar/jar.html ...続きを読む
マニフェストに Main-Class の設定がされてないだけですね。


http://java.sun.com/j2se/1.5.0/ja/docs/ja/guide/jar/jar.html
お礼コメント
heureuse

お礼率 40% (2/5)

回答ありがとうございました。
しかしご教授頂いたURLの文書は、実力不足で読みこなす事が出来ませんでした。今後は、実力を付けて読みこなせるよう努力して行きます。
ありがとうございました。
投稿日時 - 2011-07-27 12:40:47
  • ありがとう数0
  • 回答No.2
レベル8

ベストアンサー率 61% (19/31)

念のため判り易く例として、 packageクラスなどの場合 $ jar cf package.jar *.class //マニフェスト未使用 $ jar cf package.jar * //マニフェスト未使用(サブディレクトリ含む全て) 実行クラスの場合(実行クラスは変な言い方ですが要はメインクラス) $ jar cmf test.mf test.jar *.class //マニフェ ...続きを読む
念のため判り易く例として、

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

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

お礼率 40% (2/5)

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

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
  • ありがとう数0
  • 回答数3
  • 気になる数0
このQ&Aで解決しましたか?

関連するQ&A

-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ