たとえば、Foo
insideFoo.java
というクラスを使用するBar
insideというクラスがあり../Bar.java
ます。私がそうするときにそれを機能させる方法はありますjavac Foo.java
か?
3 に答える
クラスをクラスパスに追加します..
javac -cp "path to your Bar.class" Foo.java
また、そのクラスをインポートする必要がありますFoo.java
..パッケージをより適切に使用し、パッケージを含むディレクトリまでクラスパスを指定します..そうすることで、クラスに異なる名前空間を与えることができます..
したがって、パッケージが次の場合: -という名前のディレクトリにパッケージpkg1.pkg2.Bar
を保存した場合、クラスパスには .. までのパスが含まれている必要があります。実際には、クラスはディレクトリ内のさらに 2 つのディレクトリの下にあります。.java
Demo
Demo
pkg1/pkg2/Bar.class
Demo
Demo+
|
+-- B.java (`Under package pkg1.pkg2)
|
+--pkg1+
| |
| +--pkg2+
| |
| +-- B.class
|
+-- A.java (`Under no package`) - Add - import pkg1.pkg2.B
|
+-- A.class (javac -cp . A.java) - Will search the package pkg1.pkg2 in current directory
そこには必要ありませんが、他の場所.
にある場合B.class
は、任意のパスに置き換えることができます..
これらが両方ともクラスであり、同じモジュールに属していると仮定すると、パッケージを使用する必要があり、両方のクラスが同じパッケージ階層に存在する必要があります。その後、自動的に機能します。
パッケージは、たとえば、com.company.application.module.Bar や com.company.application.module.subcomponent.Foo のようなものになります。正しいパッケージの命名に関する詳細な議論を参照してください:
javac -sourcepath path/to/src/solution/java;path/to/src/test/java
複数の場所を明示的に指定することもできます(これも機能することに注意してください。違いについては、このディスカッション-classpath
を参照してください)。
同じモジュールに存在しない個別のコンポーネントについて話している場合は、クラスパスを使用して、コードが両方を認識できるようにするだけです (または、Maven のような内部で機能する依存関係メカニズムを使用することをお勧めします)。
クラスには、ディレクトリ構造にミラー化されたパッケージがあります。たとえばcom/company/pk/Foo
、 and -ステートメントcom/company/Bar
を使用してそれらを参照できます。import
クラスが異なるディレクトリにあるのに を宣言していないpackage
場合、それは間違っています。