1. ホーム
  2. java

[解決済み] Java: パッケージが存在しない

2022-02-28 05:38:20

質問

私はディレクトリにいます。E:\stuffJava>

パッケージAを作成しました。

package pack;

public class A
{
    public void methodA(){
        System.out.println("MethodA");
    }
}

コンパイルするために、次のような記述をしました。

javac -d . A.java

そのため、packという名前のフォルダが作成され、その中にA.classが含まれています。 そして、このパッケージを別のプログラムでインポートしようとしました。

import pack.A;

    class B
    {
        public static void main(String[] args){
            A a = new A();
            a.methodA();
        }
    }

このコードをコンパイルしようとすると

javac B.java

以下のようなエラーが発生します。

   B.java:1: error: package pack does not exist
import pack.A;
           ^
B.java:6: error: cannot find symbol
                A a = new A();
                ^
  symbol:   class A
  location: class B
B.java:6: error: cannot find symbol
                A a = new A();
                          ^
  symbol:   class A
  location: class B
3 errors

なぜコードの実行に失敗するのか理解できません。私のB.javaファイルとpackは同じフォルダーにあります。

どなたか、このコードのエラーについて説明していただけませんか?

解決方法を教えてください。

エラー内容からすると、他のプログラムのようです。 B.java は、'A.java' と同じディレクトリ(E: \stuffJava) にありません。これはつまり、コンパイル時に B.java がどこにあるのか、コンパイラは知りません。 pack.A . A を可視化するには、以下のように pack.A でコンパイルすることになります。

javac -cp ".;<path_to_add>" B.java

あなたの場合 <path_to_add>E:\stuff\Java . これにより、クラスパスがカレントディレクトリだけでなく ( . ) だけでなく pack パッケージがあります。

プログラムを実行するには、再び pack.A をクラスパスに追加してください。

java -cp ".;<path_to_add>" B

またどこ <path_to_add>E:\stuff\Java .

ここでは、Windowsを使用していると仮定しています。Unixでは -cp オプションの構文が若干異なります。 -cp ".:<path_to_add>" ここで ; に置き換わっています。 : .