- ベストアンサー
同一パッケージ内のクラスが見つからないエラー
- Tomcatとeclipseを用いたjspによるウェブアプリ開発の勉強中、同一パッケージ内のクラスを使いたいが見つからないエラーが発生しています。
- 試した解決方法として、異なるディレクトリでコンパイルする、クラスパスを指定するなどを試しましたがエラーは解決しませんでした。
- また、メソッドをクラス内に定義するなどの対策も試しましたが、クラスが認識されずにエラーが発生しました。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
> 1-2.クラスパスを入れてコンパイルしてみる。 > 同一パッケージ内なので、この必要はないはずですが、 > C:\(中略)\mangasearch>javac -classpath C:\(中略)\mangasearchでコンパイルしてみました。 javacでコンパイルするなら、 classpath/パッケージ/クラス と探すので、これだと、 C:\(中略)\mangasearch/mangasearch/manga.class を探しにいっちゃいますよ。 classpathに指定するディレクトリを、もう1つ上の階層にしてみてください。 eclipseとjavacとどっちを使いたいのはわからないのですが、 eclipseなら プロジェクト名/src/mangasearch/mangalist.java プロジェクト名/src/mangasearch/tagsrch.java になってますか?
その他の回答 (1)
- satomi3951
- ベストアンサー率71% (98/137)
mangalist.javaにあるmangalistクラスは、mangasearchパッケージに入っていますが、 tagsrchクラスは、package宣言が無いので、デフォルトパッケージですよね? 同じディレクトリにあれば同じパッケージって訳ではありませんので注意。 mangaクラスの宣言で、スコープが定義されていないので、mangaクラスはパッケージプライベートになります。 パッケージプライベートは、同じパッケージからは参照できるスコープです。 ですから、そのままでは、tagsrchクラスとは別のパッケージなので、参照できません。 方法1: mangaクラスのスコープをpublicにする。 ・パブリックなクラス名は、コンパイラの規則により、ファイル名と同じでなければならない(大文字小文字の区別を含めて)ってルールがあるので、更にファイル名をmanga.javaにする必要がある 方法2 tagsrchクラスをmangasearchパッケージに移動する。 あと、クラス名は先頭大文字、あとは区切りを大文字ってのが一般的なルールなので Mangaクラス、TagSrchクラスの方が良いと思う。 Srchじゃわかりづらいので、TagSearchに方がもっと良いと思います。
お礼
色々ご教授頂きありがとうございます。とても勉強になりました! 方法1、方法2、方法1+方法2を行ってみましたが、エラーは変わりませんでした。。 eclipse上のエラーチェックでもエラーはないのですが、、、どうしてなんでしょう(汗。
補足
早速のご回答、本当に感謝です! 今はパソコンがないのでできませんが、すぐ試してみます! 書き忘れていて申し訳ないのですが、tagsrchクラスにはpackage宣言がなされています。
お礼
ありがとうございます!プロジェクトディレクトリを以下に移し、classpathに指定するディレクトリを、もう1つ上の階層にしたら、無事コンパイルできました!