次の文は不安な関数に思える:クラスは、パッケージが指定するディレクトリとは別のディレクトリにあります。
[email protected]:~/tmp> cat org/foo/Bar.java
public class Bar {
}
[email protected]:~/tmp> javac org/foo/Bar.java
[email protected]:~/tmp> javap org.foo.Bar
Compiled from "Bar.java"
public class org.something.Bar extends java.lang.Object{
public org.something.Bar();
}
バークラスファイルがorg/foo
ディレクトリにあり、org.something
パッケージを宣言しますが、コンパイラは文句はありません。私は、javaがパッケージ名に続くディレクトリ階層を義務づけているという印象を受けました。私は間違っていたのですか?もしそうなら、パッケージ名を混ぜるとどうなるでしょうか?
良い答えを、同様の研究のための感謝を。私の例はオラクルの 'javac'と' javap'で行われています。 –
「必要」とは、これらのツールがパッケージ構成を生成し、_runtime_にそれを必要とすることを意味します。 javac/javapプログラムでは、ソースファイルを必要としません。言語(およびJVM)仕様の重要なポイントは、サブディレクトリの編成を必要としませんが、すべての標準javaツールの実装が行います。 – kaliatech
また、依存クラスをコンパイルするためにコンパイル時にも必要です。 BarとBarに依存していた他のクラスをコンパイルしても、それがコンパイルされていない場合、Bar.javaが適切な場所にないとコンパイルが失敗します。 – EJP