- PR -

ECLIPSEで実行可能JARファイルを作成する方法について

投稿者投稿内容
さるぽん
会議室デビュー日: 2004/10/15
投稿数: 4
投稿日時: 2004-10-15 10:04
ECLIPSE2.1.3
Windows2000で開発をしています。

「Cound not find main class」のエラーが出て困っております。

http://www.atmarkit.co.jp/fjava/rensai3/ormap03/ormap03.html
にあるようにプロジェクト内のソースフォルダー等を分けて設定し
Hibernateを利用したSwingアプリケーションを作成しました。
JARファイルをエクスポートしたものを実行するとエラーが出て実行出来ません。

今までは、プロジェクト内に特にソースフォルダーや出力先パスの指定をせず
デフォルトのままアプリケーションを作っており、manifestファイルを
作成してエクスポートすれば動作していたのですが、今回は動作しません。
(どうも基本的な事が分かっていないようでお恥ずかしいです。)

1.どのように設定してJARファイルにエクスポートすれば良いのでしょうか?

2.ECLIPSE上で実行する状態をそのまま簡単にJARファイルに出来ないのでしょうか?
 (ビルドパス付きでエクスポートするようなイメージです。)

3.ECLIPSEに関する参考URL、書籍がありましたら教えて下さい。

みっちゃん
会議室デビュー日: 2004/10/19
投稿数: 1
投稿日時: 2004-10-19 09:55
どうも。みっちゃんです。

>1.どのように設定してJARファイルにエクスポートすれば良いのでしょうか?

JARファイルがどういうものかはご存知でしょうか?
中身がわかっていればどのような設定でエクスポートしたとしても、実行時の指定でうまく動作すると思われますが。
一応書いておきますが、
  java -classpath (JARファイルパス) (メインクラス名)
JARファイルの中身の構成でパッケージを用いていれば、
  java -classpath (JARファイルパス) (パッケージ名).(メインクラス名)
とすれば動くはずです。

>2.ECLIPSE上で実行する状態をそのまま簡単にJARファイルに出来ないのでしょうか?
> (ビルドパス付きでエクスポートするようなイメージです。)

>(どうも基本的な事が分かっていないようでお恥ずかしいです。)

ご自身でこれ(↑)を理解していらっしゃるようなのですが、方法だけがわかればよいのでしょうか?
これでは似たような問題にぶつかったときに、ご自身で解決することができないと思うのですが。
中身を理解しようとしてみればいかがでしょう?
ビルドパスはコンパイル時の指定であって、エクスポートやJARファイルには関係ないかと思います。
実行時にはクラスパスを使いますが、これもまたエクスポートやJARファイルには関係ありません。
通常、JARファイルというものはクラスファイルの圧縮ファイルです。
実行方法については、1.に対する返信の通りです。
エクスポートについては、さるぽん様がなさった方法で問題ないかと思います。

>3.ECLIPSEに関する参考URL、書籍がありましたら教えて下さい。

ご自身で知りたい情報が載った本を探してみてはいかがですか?
http://www.amazon.co.jp/exec/obidos/search-handle-form/249-9249011-7448339
こういうところで検索すると、どんな本があるかはすぐに調べることができますよ。
内容を見たい場合は書店に足を向けることが一番良い方法だと思います。

それでは、がんばってください。
さるぽん
会議室デビュー日: 2004/10/15
投稿数: 4
投稿日時: 2004-10-19 10:37
どうもありがとう御座います。
ただ、例で示して頂いた方法でも実行出来ません。
同じエラーが出ます。

JARファイルそのものは分かっていたつもりだったのですが、
今回うまくいかない原因が不明でした。
manifestファイルにメインクラスの指定はしてあり、
(ECLIPSEで自動生成)
メインクラスのクラスファイルもJARにパッケージとして入っています。

HibernateのJARライブラリが見つからない為動作しない
という事であれば、別の現象が発生するでしょうが、
「メインクラスが見つからない」というのはもっと
基本的な問題の様な気がしまして。
フォルダ構成は以下の様になっております。
プロジェクト下に
--src
--src\masterMaintenance(パッケージ)
--config(xmlファイル)
--build
--build\classes(出力先フォルダー)
--build\classes\masterMaintenance
--build\lib(hibernate等のJARファイル)

の様な構造になっています。
プロジェクト毎ごっそりエクスポートしたりと
色々試してみたのですが、どうもダメでした。
出来たJARファイルの中身を見ると
masterMaintenanceというフォルダにCLASSファイル、
META-INFにmanifestファイル
hibernateのマッピングファイル等がルートに入っています。

書籍に関しましては私も調べてみたのですが、
JAVAそのものがWebアプリケーションに特化した事しか
書いていないものが多いので、ECLIPSEも必然的に
そうなっています。
一体どれを見れば良いのか???でした。
そもそもSwingアプリケーションを作っている人は現状では
皆無に等しいと思っています。

ともかく、ご返答ありがとう御座いました。
引き続き調べてみます。
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2004-10-19 11:11
まず確認ですが、Eclipse上では実行できるのでしょうか? メインクラスには、ちゃんとmain
メソッドが入っていますか?
さるぽん
会議室デビュー日: 2004/10/15
投稿数: 4
投稿日時: 2004-10-19 11:20
ECLIPSE上では実行できます。
メインメソッドの入ったクラスをJAVAアプリケーションとして
実行して問題なく実行できます。
シュン
ぬし
会議室デビュー日: 2004/01/06
投稿数: 328
お住まい・勤務地: 東京都
投稿日時: 2004-10-19 11:41
基本を確認します。

実行可能JARファイルは、
1.フォーマットはZIPファイルと同一
2."/META-INF/MANIFEST.MF"にMain-Class属性指定を記述したマニフェストが入っている
3."/"をクラスパスルートとするパス構成でclassファイルが入っている
という構成になっていれば、"java -jar"またはWindowsならファイルシンボルのダブルク
リックで起動可能、というものです。

ここで、2.や3.は、外部のツール等を使ってJARを作成場合気をつけないと全く異なる構成
になってしまうので、気をつけてください。
例えばEclipseのプロジェクトを直接zipエクスポートしてしまうと、クラスパスルートが
"(プロジェクト名)/bin/"等になってしまう、といったことが考えられます。
さるぽんさんのJARでは、クラスパスルートが"(プロジェクト名)/build/classes/"や
"/build/classes/"になってしまっている可能性大ですね。

#Tips
http://java.sun.com/j2se/1.4/ja/docs/ja/
#SDKの各種ツールの使い方は、ドキュメントのメニューページの「SDKのツール」というリ
#ンクからたどった先に詳しく載っています。ツールの使い方はそちらを読んでみると良い
#と思います。意外と知らない人が多かったりして…


#Swingアプリ作成者は皆無、だなんていわないでくださいorz
#JavaWebStartや、他のリッチクライアント技術がHTMLベースのセコイUIを駆逐すると信
#じている人間より

[ メッセージ編集済み 編集者: シュン 編集日時 2004-10-19 11:52 ]
JW
常連さん
会議室デビュー日: 2004/01/14
投稿数: 49
投稿日時: 2004-10-19 11:51
引用:

さるぽんさんの書き込み (2004-10-19 10:37) より:

HibernateのJARライブラリが見つからない為動作しない
という事であれば、別の現象が発生するでしょうが、
「メインクラスが見つからない」というのはもっと
基本的な問題の様な気がしまして。



jarファイルのダブルクリック実行で、最初に有った"「Cound not find main class」が(ダイアログで)出る" = "「メインクラスが見つからない」"とは限らないです。
# 紛らわしいメッセージだとは思いますが。
# 元々javaw で動かした時はエラーがあっても何もエラーダイアログを出さずに終わっていたので、1.3か1.4でメッセージを出すよう改修してるはずですが、エラー内容によらず固定文字列じゃないのかな?このダイアログは。(追記:固定じゃないけど、メインのクラスを読み込む際に、メンバにクラスパスに存在しないクラスを使用していたりして結果的にメインクラスを生成できない場合に、この文字列になる模様)


java -jar xxx.jar
とした時に何がNotFoundなのか一度確認してみてください。
たぶんライブラリ側のクラスが無いのではないでしょうか。

ライブラリのクラスを全部展開して全部jarファイルに含めるか、manifestにClass-Pass:を加えるか何かしなければなりませんが、そこまで面倒は見てくれないんでしょう>Eclipse

[ メッセージ編集済み 編集者: JW 編集日時 2004-10-19 11:59 ]
YOU@IT
ぬし
会議室デビュー日: 2002/03/29
投稿数: 284
お住まい・勤務地: 大阪
投稿日時: 2004-10-19 11:59

・実行しようとしているコマンド
・jar tvf xxx.jarの結果
・マニフェストファイルの内容
を書き込みして頂けますか?

スキルアップ/キャリアアップ(JOB@IT)