- PR -

Strutsを用いたWebアプリで、classes以下のファイルをjar化して実行したい

投稿者投稿内容
tomo
常連さん
会議室デビュー日: 2004/07/31
投稿数: 20
投稿日時: 2004-08-10 12:41
こんにちは、java初心者です。
Strutsを用いたWebアプリを現在作っているのですが、WEB-INF/classes以下にある
ファイルをjar化して、WEB-INF/lib以下に置いて実行したいと思っています。
が、classes以下のファイルをただclasses.jarとして、lib以下に置いても
うまくいきません。おそらくパスの問題なのかと思いますが、どのように指定すれば
良いのかわかりません。
サーバーはローカルでTOMCAT4.1を使用しています。
struts-config.xmlの内容を変更したり、TOMCATのserver.xmlで何か指定が
必要なのでしょうか?
ご存知の方いらっしゃいましたら教えていただけるとうれしいです。

山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2004-08-10 13:02
通常 classes の中身をそのまま jar に固めて lib に放り込めばうまくいくはずです。

classes 内のディレクトリ構造はそのままに jar ファイルにしていますか?

あと、クラスロードの優先順位は classes -> lib の順になっているので Struts のクラスにパッチをあてているような場合は lib ディレクトリに入れるとうまく反映されないかもしれません。

また、うまくいきません、とはどのような症状ですか?
tomo
常連さん
会議室デビュー日: 2004/07/31
投稿数: 20
投稿日時: 2004-08-10 13:25
インギさん 早速お返事いただきありがとうございます。
以下のようなエラーがでます。

HTTP Status 500 -

--------------------------------------------------------------------------------

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

org.apache.jasper.JasperException: Exception creating bean of class webapp.CertificateForm: java.lang.ClassNotFoundException: webapp.CertificateForm
(以下略)

classes 内のディレクトリ構造はそのままでjar ファイルにしています。
(jar cf classes.jar classes としてjarを作りました)
strutsを使ってサンプルを作っただけなので、多分Struts のクラスにパッチを当てて
いるわけでもないと思います。
Formクラスが見つかっていないようなので、Struts-config.xmlの記述間違いなのかと思うのですが、いかがでしょうか。

yuzy
大ベテラン
会議室デビュー日: 2002/02/14
投稿数: 117
投稿日時: 2004-08-10 13:49
>(jar cf classes.jar classes としてjarを作りました)

jarの作り方を間違えています。
classes.jar の中身をのぞいてみてください。
classes/.../となっているはず。
それではだめです。

jar cf classes.jar -C classes .
としてください。

(jarのマニュアルを読んでください。)
tomo
常連さん
会議室デビュー日: 2004/07/31
投稿数: 20
投稿日時: 2004-08-10 16:46
yuzyさんありがとうございます。
確かに間違っていました。jar cf classes.jar classes だと
classesの下にさらにclassesが出来るのですね。とても勉強になりました。

今度は、jar cvf classes.jar -C classes/ . でjarを作って ちゃんと
classesの下に同じフォルダ構成でファイルを入れることが出来ました。

しかし、TOMCATを再起動して、再度URLを打ってみたのですが、全く同じ
エラー(java.lang.ClassNotFoundException)が出ます。
classes以下にファイルを置いているときにはきちんと実行できていたので
うまくいくはずだと思うのですが、どうもうまくいきません。

今のディレクトリ構成は以下のようにっています。
WEB-INF/classes/ ・・・中身はなし
/lib/ ・・・classes.jar
          struts.jar 等
/src/ ・・・javaのソースファイル
/struts-config.xml
/web.xml
/struts.tld  等々

struts-config.xmlの内容は、
 <form-bean name="certificateForm" type="webapp.CertificateForm" />
というように、jarにする前と変えていません。
jarファイルの名前を指定したりしないといけないのでしょうか?



山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2004-08-10 16:58
まず jar ファイルがちゃんと作られているか確認してみましょう。
コード:
public class Tester{
 public static void main(String[] args)throws Exception{
   Class.forName("webapp.CertificateForm");
   System.out.println("Ok.");
 }
}


java -cp classes.jar Test

こんなのはうまくいきますか?
ボア
ベテラン
会議室デビュー日: 2002/05/22
投稿数: 78
投稿日時: 2004-08-10 20:44
jar tvf classes.jar
で、ディレクトリ構成がパッケージの構成で一覧表示されますか?
tomo
常連さん
会議室デビュー日: 2004/07/31
投稿数: 20
投稿日時: 2004-08-10 21:21
インギさん ボアさん ありがとうございます。
インギさんがくださったソースを実行してみた所、きちんとOKが出ました。
また、jar tvf classes.jar を実行してみると ツリー構造で表示されました。
少し気になったのは
classes/./org/apache/jsp/menu_jsp.class
classes/./org/apache/jsp/index_jsp.class
classes/./org/apache/jsp/error_jsp.class というように、全ての
ファイルの表示で間に /./ が表示されていた事です。
それから、先ほど確認してみた所、strutsをラップしたフレームワークを
同時に使用していたことを忘れていました。

インギさんが言われていた、
>Struts のクラスにパッチをあてているような場合は lib ディレクトリに入れるとうまく反>映されないかもしれません。
という事なのでしょうか?

ちなみに、そのstrutsをラップしたフレームワークは、strutsと同様、jarファイルを
WEB-INF/lib以下に置くと使えるようになります。

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