私はJavaパッケージを理解しようとしています。javacがクラスファイルを同じパッケージ内に見つけられないのはなぜですか?
私は2つのクラス、A.javaとB.javaを同じパッケージに持っています。 クラスAはクラスBを参照します。
どちらもパッケージ文package world.example;
を持ち、.../world/example/
というディレクトリに保存されます。
Bは大丈夫コンパイルしますが、Aをコンパイルしようとすると、javacは私が/world
の親からだけでなく、/example
からのjavacを実行しようとしているB.
のためのクラスファイルを見つけることができません。私はここと他の場所の多くの答えを無駄に探し求めました。似たような話題のほとんどの質問には、無関係なコードや情報があるようですが、私は自分の問題を裸の骨にまで掘り下げようとしていますが、まだ私が見逃しているものは見えません。
補足:パッケージ文を削除した場合、Aをコンパイルするときにクラスパスを指定すれば、両方のクラスが正常にコンパイルされるため、javac -classpath . A.java
となります。
コードは次のとおりです。
package world.example;
public class A {
public static void main(String[] args) {
String msg = B.getMessage();
System.out.println(msg);
}
}
...と...
package world.example;
public class B {
protected static String getMessage() {
return "Hello world!";
}
}
...とjavacから出力...
17-04-17◆23:03 example »javac B.java
17-04-17◆23:04 example »javac A.java
A.java:5: error: cannot find symbol
String msg = B.getMessage();
^
symbol: variable B
location: class A
1 error
17-04-17◆23:04 example »javac -classpath . A.java
A.java:5: error: cannot find symbol
String msg = B.getMessage();
^
symbol: variable B
location: class A
1 error
サブディレクトリ "word"を含むディレクトリからコンパイルします。 I. javac word/example/A.java –
'world'の親に行き、' javac world/example/*。java'と入力すればどうなるでしょうか? –