2016-07-11 9 views
2

パッケージがダウンロードされ、-cpまたはインポートするためにCLASSPATH環境変数(そうしないと、コンパイルエラーパッケージXが存在しません取得)で参照する必要があります。インポートしたパッケージはコンパイル後に.classファイルに含まれていますか? (例えば、<code>javax.websocket</code>用)JDKに含まれていない

.classファイルが取得され、コンパイル、後は、javax.websocketパッケージを持っているし、そのコンピュータ上のJVMはそれらを実行していない、またはそれをする必要があるコンピュータにこれらのファイルを転送することが可能です両方のコンピュータにパッケージを持っていますか?

つまり、import bar.foo;と書くと、fooが表示されるたびに、と書いてあります。この場所に移動し、その内容を確認してください。。しかし、ソースコードをコンパイルしたときには、バイトコードは「」と表示されて「」と表示されているか、または既にその場所に移動しています。必要なの?コンパイル後

+0

「import」ステートメントは、コンパイル専用です。実行時に何もしません。 [この回答](http://stackoverflow.com/questions/1457863/what-c​​auses-and-what-are-the-differences-between-noclassdeffounderror-and-classn?lq=1)を参照してください。はい、クラスを使用する場合は、実行時にクラスを使用できるようにする必要があります。 –

+0

実行時に外部ライブラリが必要になる – Sanjeev

+0

@SotiriosDelimanolisパッケージが利用可能であることを確認している限り、Javaデザイナーがソースコードをコンパイルすることを許可していれば、インポートステートメントを省略することも可能です実行時に? – Gendarme

答えて

1

、.classファイルが得られた場合、それはjavax.websocketパッケージを持っていないコンピュータにこれらのファイルを転送し、それらを実行しているコンピュータにJVMを持つことが可能である、またはそれはする必要があります両方のコンピュータにパッケージを持っていますか?

両方のコンピュータにパッケージをインストールする必要があります。バイトコードでは、実行時に関連するクラスをJVMが利用できるようにすることを想定しています。

また、同じコンピュータでコンパイルして実行している場合でも、Javaコンパイラがコンパイル用のパッケージを取得する場所は、コード実行時にJVMがパッケージを取得する場所と異なる場合があります。

+0

* "Javaコンパイラがコンパイルのためにパッケージをプルする場所は、JVMがコードを実行するときにパッケージをプルする場所と異なる場合があります" *コンパイル専用の 'CLASSPATH'変数は実行時には使用されませんか?その場合、どのようにランタイムパッケージ引っ張りの場所を指定するのですか? – Gendarme

+1

@Gendarme 'javac'と' java'はどちらも同じ 'CLASSPATH'環境変数を使います。しかし、 '-classpath'オプションをコンパイラまたはJVMに渡すことで、それを上書きするオプションがあります。 Oracleによると、クラスパスを指定するこの方法は、 'CLASSPATH'変数よりも優先されます。 – dasblinkenlight

0

問題の非常に徹底した説明がで、右ここSO上、見つけることができます:

に直接引用著者JB Nizet:(追加イタリック体は私のもの)

コンパイルクラスパスは、Javaソースファイルをコンパイルするために使用されるクラスパスです(javac -cp ...、またはあなたのIDE)。ソースファイルで参照されるすべてのクラスはコンパイルクラスパスに存在しなければなりません。そうしないと、コンパイラはクラスを見つけることができないと不満を持ちます。

クラスをコンパイルしたら、それらを使用して(java -cp ...を使用して)プログラムを実行できます。明らかに、あなたのソースコードが直接依存するライブラリは、ランタイム classpathになければなりません。しかしそれだけではありません。 CoolLibrary.jarに直接依存し、このライブラリが内部でGuava.jarに依存している場合は、Guava.jarも実行時クラスパスに含める必要がありますが、コンパイル時には不要です。

ウェブアプリケーションは少し特殊です。 [...元の回答が続く...]

+0

最後の点は面白いです。不必要な結合を避けるもう一つの理由。 – Gendarme

関連する問題