2

たとえば、FooinsideFoo.javaというクラスを使用するBarinsideというクラスがあり../Bar.javaます。私がそうするときにそれを機能させる方法はありますjavac Foo.javaか?

4

3 に答える 3

3

クラスをクラスパスに追加します..

javac -cp "path to your Bar.class" Foo.java

また、そのクラスをインポートする必要がありますFoo.java..パッケージをより適切に使用し、パッケージを含むディレクトリまでクラスパスを指定します..そうすることで、クラスに異なる名前空間を与えることができます..

したがって、パッケージが次の場合: -という名前のディレクトリにパッケージpkg1.pkg2.Barを保存した場合、クラスパスには .. までのパスが含まれている必要があります。実際には、クラスはディレクトリ内のさらに 2 つのディレクトリの下にあります。.javaDemoDemopkg1/pkg2/Bar.classDemo

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は、任意のパスに置き換えることができます..

于 2012-10-03T06:40:35.223 に答える
1

これらが両方ともクラスであり、同じモジュールに属していると仮定すると、パッケージを使用する必要があり、両方のクラスが同じパッケージ階層に存在する必要があります。その後、自動的に機能します。

パッケージは、たとえば、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 のような内部で機能する依存関係メカニズムを使用することをお勧めします)。

于 2012-10-03T06:40:16.057 に答える
0

クラスには、ディレクトリ構造にミラー化されたパッケージがあります。たとえばcom/company/pk/Foo、 and -ステートメントcom/company/Barを使用してそれらを参照できます。importクラスが異なるディレクトリにあるのに を宣言していないpackage場合、それは間違っています。

パッケージについて読む

于 2012-10-03T06:41:11.383 に答える