- - PR -
異なるプロジェクト内のクラスの関数を使うには
| 投稿者 | 投稿内容 |
|---|---|
|
投稿日時: 2004-03-10 09:39
Eclipseでjava開発を行っています。
「Ecpliseで作成した2つのプロジェクトをあり、 一方から他方のプロジェクト内のクラスの関数を使う」 という処理で困っています。 <エラー> exception→ javax.servlet.ServletException: サーブレットの実行により例外を投げました root cause→ java.lang.NoClassDefFoundError: test/common/DBAccess 関数を呼び出す側では、 import test.common.*; DBAccess db = new DBAccess(); と記述しており、コンパイル時にはエラーは発生しません。 クラスパスの問題かと思い設定し直しましたが、 同じエラーが起こりました。 設定方法がまずいのか、解決策が間違っているのか・・・ 何か解決方法をご存知の方、どうぞよろしくお願いいたします。 <参考> Eclipse 2.1 struts 1.1 Tomcat 4.1 tomcat plugin 2.21 J2SE 1.4.1_02 |
|
投稿日時: 2004-03-10 11:35
だるまさんがおっしゃるようにクラスパスの問題だと思います。
test.common.DBAccess が、呼び出すクラスなんですよね? だとすると、 [○○プロジェクトのプロパティ]―[Javaのビルド・パス] と進んで、test.common.DBAccessクラスが存在する JARなりクラスフォルダなりを追加すればよいと思います。 |
|
投稿日時: 2004-03-10 12:54
こんにちは。
クラスパスの修正は正解です。 ただ、そのクラスパスをクラスローダーが見てくれないと意味がありません。 どのクラスローダーが動いているのかわかれば、どこで定義している クラスパスに対して修正が必要であるかわかると思います。 今回の場合ですと、Tomcatが見てくれないと意味が無いということです。 |
|
投稿日時: 2004-03-10 17:48
ご返答ありがとうございます。
恐縮ですが、まだ未解決です。 プロジェクトの、javaのビルドパスに 「test.common.DBAccess」が存在するクラスフォルダー「prc/bin」を追加しました。 が、エラーは同じでした。 次に、Tomcatの開発用クラスローダのクラスパスの設定で、 上と同じパスを有効にして、再度試みましたが、 今度はTomcatが起動しなくなってしまいました・・。 (Tomcat起動時に おちる) 設定方法の間違いでしょうか? よろしくお願いします。 |
|
投稿日時: 2004-03-11 00:52
こんにちは初めまして。
私も以前これに嵌りました。 Tomcatプラグインを使ってWEBアプリを開発する場合はプロジェクトの クラスパスの設定だけでは不十分です。それでコンパイルは可能になり ますがですが、アプリはあくまでTomcat上で動作するのでTomcatのクラ スパスに設定を加えてやる必要があります。 Eclipseの ウィンドウ(W)→設定(P)→Tomcatで表示される設定画面から 「JavaプロジェクトをTomcatのクラスパスに追加する」で必要な プロジェクトを追加して見て下さい。 これでアプリ実行はもちろん参照される側のクラスに対してもブレーク ポイントを張ってのデバッグなどが可能になります。 ただしこの設定によりTomcatの起動が遅くなってしまうかも知れません。 |
|
投稿日時: 2004-03-11 09:20
御返答ありがとうございます。
恐縮ながら未解決です。 >ウィンドウ(W)→設定(P)→Tomcatで表示される設定画面から >「JavaプロジェクトをTomcatのクラスパスに追加する」で必要な >プロジェクトを追加して見て下さい。 上記は設定済でした。 ところで、最近気が付いたのですが、 EclipseからTomcatを起動できないです・・・。エラーが出ます。 (いつもは「Start Tomcat」から起動していました。) <エラー> log4j:WARN No appenders could be found for logger (org.apache.commons.digester.Digester). log4j:WARN Please initialize the log4j system properly. Catalina.start: java.lang.ClassNotFoundException: org.apache.catalina.core.StandardServer java.lang.ClassNotFoundException: org.apache.catalina.core.StandardServer <Tomcatプラグイン> SYSDEOのTomcat Plagin2.1 これは、異なるプロジェクト内の関数を使えない原因に 関係ありそうですが・・・。 何回も申し訳ないのですが、 よろしくお願いいたします。 [ メッセージ編集済み 編集者: だるま 編集日時 2004-03-11 09:22 ] [ メッセージ編集済み 編集者: だるま 編集日時 2004-03-11 09:29 ] |
|
投稿日時: 2004-03-11 15:17
こんにちは。
> <エラー> > log4j:WARN No appenders could be found for logger(org.apache.commons.digester.Digester). log4j:WARN Please initialize the log4j system properly. Catalina.start: java.lang.ClassNotFoundException: org.apache.catalina.core.StandardServer java.lang.ClassNotFoundException: org.apache.catalina.core.StandardServer log4jが使用するlog4j.propertiesが見付からないと言っているのでは ないでしょうか。 > <Tomcatプラグイン> > SYSDEOのTomcat Plagin2.1 > > これは、異なるプロジェクト内の関数を使えない原因に > 関係ありそうですが・・・。 たぶん関係ないと思います。 だるまさんがやろうとしていることは 1.Eclipse+TomcatプラグインでWEBアプリを開発。 2.プロジェクトを2つ(一方を共通系、一方をアプリ系)に分け、 アプリ系から共通系を参照する。 といった事だと思いますが、この点は宜しいでしょうか? それであれば基本的に必要な設定は、 ・プロジェクトのプロパティ→Javaのビルド・パス→プロジェクト(P) →参照先のプロジェクトを選択 ・ウィンドウ(W)→設定(P)→Tomcatで表示される設定画面から 「JavaプロジェクトをTomcatのクラスパスに追加する」で参照先の プロジェクトを追加。 の2点だけでOKのはずです。 > 次に、Tomcatの開発用クラスローダのクラスパスの設定で、 > 上と同じパスを有効にして、再度試みましたが、 > 今度はTomcatが起動しなくなってしまいました・・。 >(Tomcat起動時に おちる) 上記が具体的にどのような作業をされたのか不明ですが、その他 クラスパスをいろいろ張ってみたり設定を変えられていると思わ れ、そちらの副作用で動かなくなっているのではないかと思われます。 可能であればいっそのことプロジェクト環境をもう一度作り直して みてはどうでしょうか? |
|
投稿日時: 2004-03-12 10:21
こんにちは。
ん〜、遠まわしすぎましたか。 とりあえず整理してみましょう。 今回はeclipseとtomcatを使用してwebアプリを作成されているようですが、 tomcatプラグインを使用されてますので、設定内容の異なるクラスパスが 3つ存在することになります。 1.eclipse上でコンパイルするときに使用するクラスパス 2.eclipse上でtomcatプラグインを使用して起動したtomcat上で使用するクラスパス 3.tomcatを単体で起動したときにtomcatが使用するクラスパス まず、1についてはコンパイルもできるわけですので正しく設定されているようですね。 2も設定されてるとのことですので、eclipse上でtomcatを起動した場合であれば 動作するハズです。 ただ、今まではtomcat単体で起動されていたとのことですので、3が該当し 「NoClassDefFoundError」ということになります。 >次に、Tomcatの開発用クラスローダのクラスパスの設定で、 >上と同じパスを有効にして、再度試みましたが プロジェクト→プロパティ→tomcatの部分ですよね。 これは不要ですので無効にしてください。 上記2の設定と似てますが違うものです。 これを無効にした状態でeclipse上からtomcatは起動しますでしょうか? 無事起動すればWebアプリは動作すると思います。 上記3の環境で動作させる場合、普通はwar形式のファイルにまとめることで 対応します。 具体的には、使用するwebアプリケーションの「WEB-INF/lib」ディレクトリ内に 共通ライブラリとして使用したいclassをまとめたjarファイルを入れること になると思います。 |
