QA@IT

java, jarファイルの作成、クラスパスの設定について

5328 PV

閲覧ありがとうございます。java学習中の学生です。
規定のフォーマットに沿うrunnableなjarが作れず、数日いろいろ試したのですができなかったため、初めて質問させていただきます。
プログラム自体は完成しており、eclipseで実行可能なことも確認済みです。

まず、問題を説明するためプログラムの内容から。
Genetic Algorithmを用いて問題解決をするプログラムです。起動時のargument(引数?)の一つとして解決したいProblemの名前をstringで読み取り、reflecitonを用いてstringと同名のクラス(Problem interfaceを実装したクラス)を探し、そのインスタンスを生成します。その後、その問題に対するsolutionを得たpopulation(複数のthreads)を各自進化させていき、優れたsolutionをリストに保存していくというシンプルなプログラムです。

そして質問の本題ですが、
開発段階では、Problem interfaceを実装したモックオブジェクトをパッケージ内で作成しテストを行ったのですが、実行可能なjarを生成し提出することで、プログラムはjarと同じダイレクトリに置かれたユーザー側のProblemを実装したオブジェクトを読み取ることができなければいけません。
ここ数日、自分なりにマニフェストのクラスパスを変更したり、jarの場所を移動したりして、jar外部に配置したProblem実装クラスの読み取りを試みたものの、クラスが見つからないというエラーもしくはNoClassDefFoundErrorが出てしまいます。
(引数のオブジェクト名をパッケージ名.オブジェクト名とすると、クラスが見つからない旨のエラー、引数をオブジェクト名のみに設定すると、"NoClassDefFoundError 読み込みたいオブジェクト(wrong name: パッケージ名/読み込みたいオブジェクト)"が表示されます。)

*モックをjarに入れて生成し、"パッケージ名.モックオブジェクト名"を引数にいれるとプログラムは正常に作動します。

ネットでもいろいろと調べたのですが、別のjarをclass pathに設定する方法等とは、実際に利用されるクラスがわからないため少し異なり、リサーチ不足かもしれませんが、答えを探しだせませんでした。
なので、このプログラムをrunnableにするjarパッケージングの方法がわかる方がいれば、アドバイスをいただけるとありがたいです。
また、国外で勉強しているため、英語、カタカナが多く、読みづらくなってしまい申し訳ありません。

Merry christmas & よいお年を!

回答

実行型JARファイルをそのまま実行してしまうと、自身のJARにしかクラスパスが通っていない状態になるので、URLClassLoaderなどを使って動的にクラスをロードしてください。

編集 履歴 (0)
ウォッチ

この質問への回答やコメントをメールでお知らせします。