2017-04-17 12 views
0

私は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 
+0

サブディレクトリ "word"を含むディレクトリからコンパイルします。 I. javac word/example/A.java –

+0

'world'の親に行き、' javac world/example/*。java'と入力すればどうなるでしょうか? –

答えて

0
I have two classes, A.java and B.java, in the same package. Class A references class B 

実際の分離方法で.javaファイルと.classファイルを分離する必要があります。

私はコンパイルプロセス全体を繰り返します。

最初に.javaファイルを.classファイルから分離し、混乱を避けるために、CMDで.javaファイルをコンパイルするときにこのコマンドを使用します。

javac -d Target_Location Filename.java >>>> Spaces are important 

Target_location = C:\何とか\何とか<あなたは、パッケージ/ classesディレクトリは中になりたい<

あなたが選んだTarget_Location上のクラスファイルを取得するつもりだコンパイルした後。前。したがって、サードパーティのパッケージを提供したため、クラスパス環境変数をそのターゲット場所に変更する必要があります。

実行して参照してください。

CMDでクラスパスを設定する方法。

​​
関連する問題