Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

Java Packageについて

windows2000上でJ2SDK1.4の環境で自作のPackageが利用できなくなりました。
以前、入門書の習作を参考にして作成したパッケージを利用して稼動しているクラスを少々手直ししようとして、何年かぶりに再コンパイルしてみると、パッケージをimportする個所でパッケージが存在しないというエラーが出ます。
コンパイル前に別の場所に保管しておいたclass(以前コンパイルしていたもの)を元にもどすと正常に稼動しますので実行環境は問題ないようです。問題を簡単にする為に、以前参考にした習作を再度作成してみましたがやはりうまくいきません。習作の概要は次の通りです。
e:\workをカレント・ディレクトリとしてpackage myJava;で始まるBook.javaというソースでpublicなクラスBookを定義します。コンパイルしたBook.classはe:\work\myJavaに配置します。DemoPackage.javaはそのPackageをimport myJava.*;でインポートし、Bookクラスのインスタンスを作成して使用します。e:\work上でDemoPackage.classのコンパイルを試みます。(Book.javaもBook.classもe:\workには存在しないことを確認済です)この状態で、
import myJava.*;の個所で
パッケージmyJavaは存在しません。のエラーが出てコンパイルできません。以前、同じ理解でこの習作は正常に作成できたような気がするのですが、私の勘違いでしょうか?

以前と変わったことは、因果関係は考えにくいのですが、J2SDKのバージョンが1.2または1.3だったのが、現在は1.4を使用している点くらいです。習作本は「Java超入門」Kris Jamsa/ASCIIです。(1999年頃購入)

もしお気付きの点等ありましたら、よろしければお教え下さい。

4

回答

2713

閲覧

4件の回答

評価

0

普通に考えるとコンパイルできると思うんですけどね。
-classpathパラメータに無理矢理カレントディレクトリを指定して実行してみるとか?

javac -classpath . DemoPackage.java;

評価

0

ご教示ありがとうございます。ご指摘通りでうまくいきました。実は似たことは試しておりましたが、カレントディレクトリではなくPackageを配置したmyJavaを指定していたのがいけなかったようです。

ちなみに、本来の目的のソースはhogehoge.java(仮名)というサーブレットでした。その為servlet.jar等にもclasspathを通す必要から、環境変数を使用してのコンパイルを試しておりました。しかし、この方法だとうまく行きません。(カレントディレクトリもフルパス名で環境変数classpathの末尾に加えてみましたがやはりうまくいきません。)
ご指摘通りコマンド・ラインで-classpathオプションを使用するとうまくいきます。ちなみにパス名が長い時はMS-DOS形式のパス名(スペースの無いやつ)でないと不可でした。Tomcatを使用しているのですが省略時のフォルダにインストールした為servlet.jarがやたら深いところにあります。そんな訳で結局下記のようやるとコンパイルが通ります。

javac -classpath C:\Progra~1\Apache~1\Tomcat~1.1\common\lib\servlet.jar;. hogehoge.java
(上折り返しは連続しています)

ところで、以前同じソースでコンパイルした時は特にこのようにしなくてもpackageを配置後

javac hogehoge.java

だけで通ったような気はするのですが...?

しかし、おかげさまで、本来の作業に入れます。大変感謝しております。どうもありがとうございました。お礼とご報告まで。

評価

0

お詫びと訂正

質問の件、開発機の環境に問題があることに気づきました。
開発ソースをe:ドライブに置いている点は変わらないのですが、実は以前はJDKがインストールされている開発機に物理的に実接続しているドライブをe:としていましたが、現在は、同じくe:ドライブに割り当ててはいるもののLANで接続した別PCの外付ドライブ・ユニットをネットワーク・ドライブとして参照していました。

この環境では他にもアプリケーション・クラスhogehoge.classが
java hogehoge
でNotFoundClassFoundErrorという例外で起動できないなど不具合が生じました。ご指摘の書式で試すとこれもOKでした。(下記)

java -classpath . hogehoge

あたかも、JDKのVersionしか環境の違いが無いかのようなことを書きましたので、誤解をまねかぬよう訂正いたします。

どうもお騒がせしてすみませんでした。

評価

0

お詫びと訂正

質問の件、開発機の環境に問題があることに気づきました。
開発ソースをe:ドライブに置いている点は変わらないのですが、実は以前はJDKがインストールされている開発機に物理的に実接続しているドライブをe:としていましたが、現在は、同じくe:ドライブに割り当ててはいるもののLANで接続した別PCの外付ドライブ・ユニットをネットワーク・ドライブとして参照していました。

この環境では他にもアプリケーション・クラスhogehoge.classが
java hogehoge
でNotFoundClassFoundErrorという例外で起動できないなど不具合が生じました。ご指摘の書式で試すとこれもOKでした。(下記)

java -classpath . hogehoge

あたかも、JDKのVersionしか環境の違いが無いかのようなことを書きましたので、誤解をまねかぬよう訂正いたします。

どうもお騒がせしてすみませんでした。

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。