クラスパスとビルドパスの違いは何ですか


86

私はこれらの2つの用語と混同しています。

また、Spring MVCプロジェクトのsrcフォルダーの下にファイルを作成するにはどうすればよいですか?Fileオブジェクトを使用して作成すると、C:\ SpringSourceTool内にファイルが作成されます...これはClassPathだと思いますか?

applicationcontextアプリケーションのフォルダまたはルートを取得するにはどうすればよいですか?

回答:


100

ビルドパスは、アプリケーションのビルドに使用されます。これには、アプリケーションのコンパイルに必要なすべてのソースファイルとすべてのJavaライブラリが含まれています。

クラスパスは、アプリケーションを実行するために使用されます。これには、Javaアプリケーションの実行に必要なすべてのJavaクラスとライブラリが含まれます。クラスパスは必須です。デフォルトのパスは.、Java仮想マシンがユーザー定義のパスを見つけられない場合に使用されます。(jarマニフェスト内のCLASSPATH環境変数、-cpフラグ、またはClass-Path:属性)


ただし、javacはクラスパス引数を取ります。ビルドパスを指定するために、このパラメーターが「オーバーロード」されたと言えますか?
aioobe 2010

4
いいえ。classpath引数は、使用するすべてのクラス(JFC、ライブラリなど)を自分でビルドするわけではないため、実行時に利用可能/提供されるとコンパイラーが期待することのヒントです。ビルドパスは、ソースおよび/またはソース/コンパイル依存関係およびそれらを探すために、両方が含まれています。
Johannes Wachter 2010

プラグインの開発中に、必要なすべてのライブラリをクラスパスに追加しましたが、何もインポートできませんでした。パスを構築するためにそれらを追加するまで、Eclipseはそれらを認識しませんでした。
バックス2012年

51

クラスパスは、(標準の)JavaコンパイラとJavaランタイムに、コンパイルされたクラスの場所を指示する従来の方法です。これは通常、JARファイル名とディレクトリ名のシーケンスです。コンパイラとランタイムシステムで使用されるクラスパスはありませんする必要が同じですが、彼らは一般的である必要があり、特に小規模なプロジェクトのために、。

Buildpathは標準のJava用語ではありません。これは、典型的なIDEがアプリケーションを構成する「プロジェクト」間の関係を指定するより豊かな方法を表す用語です。IDEはこれを使用して、Javaコードをコンパイルするためのクラスパスとソースパス、およびそれを実行するためのクラスパスを把握します。IDEはまた、ビルドパスを使用して、コードとその依存関係を(たとえば)WARファイルとしてパッケージ化する方法を理解します。

たとえば、プロジェクトのEclipseビルドパスには、プロジェクトが依存する他のプロジェクトが含まれ、プロジェクトに含まれる/依存する追加のライブラリJARが一覧表示されます。また、ダウンストリームプロジェクトが依存できる現在のプロジェクトのパッケージも一覧表示されます。

(プロジェクトにMavenを使用している場合、IDEビルドパスメカニズムはPOMファイルで宣言された依存関係の二次的なものです。たとえば、Eclipseとm2eclipseを使用すると、ビルドパスはPOMファイルから合成されます。)


27

クラスパスは、コンパイルされたクラスとリソースをロードするために実行時に使用されます。

ビルドパスは、プロジェクトのビルドに必要な依存関係を見つけるためにコンパイル時に使用されます。


クラスパスは.classファイル(およびその他のコンパイル済みリソース)の検索に使用され、ビルドパスはコンパイルが必要なソースファイルの検索に使用されると言えますか?
アダム

1
@アダム私はそれが完全に真実だとは思いません。ビルドパスには、ソースファイルをコンパイルするために.classファイルが必要な場合があります。そのため、ビルドパスはバックグラウンドでもクラスパスを使用します。Java CLIを使用してJavaプロジェクトをコンパイルして実行するのに少し時間がかかる場合は、これを確認できます。javacとjavaコマンドには、どちらもクラスパスオプションが必要な場合があるため、どちらにもクラスパスオプションがあります。
intrepistar_ 8818年

4

各Javaプロジェクトには、プロジェクトのコンパイルに必要なすべての依存関係を指定する独自のビルドパスがあります。これらの依存関係は、ワークスペース内の他のJavaプロジェクト、Javaアーカイブ.jarファイル、または.classファイルを含むフォルダーから発生する可能性があります。

CLASSPATH環境では、.classファイル(つまり、jar、zipファイル– jar、zipファイル内にはjavaクラスのみがあります)のみを指定する必要があります。つまり、Java仮想マシン(JVM)がJavaクラスファイルを見つけるのを支援しています。

また、Spring MVCプロジェクトのsrcフォルダーの下にファイルを作成するにはどうすればよいですか?Fileオブジェクトを使用して作成すると、C:\ SpringSourceTool ...内にファイルが作成されます。

ここでJVMが開始されました。ファイルを作成する場合は、ここから相対パスを使用します。

詳細については、これこれを参照してください。


あなたはあなたの答えの中でビルドパスについてさえ言及しませんでした。
aioobe 2010

4

私はことを説明するAndreas_Dの答えに追加したいビルド・パスが外部のパッケージおよびクラス見つけるためにIDE /コンパイラによって必要とされ、あなたのコードで使用します。 これらを「依存関係」と呼ぶこともあります。

注意:これらの外部パッケージは、圧縮された.jarファイル内にパッケージ化されている場合があります。実際、「ライブラリ」内に複数のjarファイルがパッケージ化されている場合があります。ライブラリまたはライブラリのグループは、多くの場合、「フレームワーク」を構成します。

コードに他の人が書いたコードが必要な場合は、コマンドを使用してそれらをクラスにインポートできますimport。ただし、コンパイラまたはIDEはこれらのクラスがどこにあるかを知る必要があるため、このコマンドだけでは不十分です。あなたにはこれを指定ビルド・パス

classpath一方では、あなたのコードの実際の実行中に任意の依存関係を見つけるためにあなたのアプリケーションを実行しているJVMに指示します。

また、注意: クラスパスはJVMで使用するためのものです。

ビルドパスはIDE /コンパイラで使用するためのものであり、開発環境からクラスパスを構築する手段です。IDEを介してビルドパスを構成すると、プロジェクトに.classpathという隠しファイルも構成されます。これは、デプロイメント時にJVMへのクラスパスを提供するために使用されます。


1

クラスパスウィキペディアから):

従来の動的ロード動作と同様に、Javaプログラムを実行すると、Java仮想マシンはクラスを遅延して検出してロードします(クラスが最初に使用されたときにのみクラスのバイトコードをロードします)。クラスパスは、これらのクラスを定義するファイルをファイルシステム内で探す場所をJavaに指示します。

仮想マシンは、次の順序でクラスを検索してロードします。

ブートストラップクラス:Javaプラットフォームの基本となるクラス(Javaクラスライブラリのパブリッククラスと、このライブラリが機能するために必要なプライベートクラスで構成されます)。

拡張クラス:JREまたはJDKの拡張ディレクトリにあるパッケージ。

jre / lib / ext /ユーザー定義のパッケージとライブラリ

デフォルトでは、JDK標準APIのパッケージと拡張パッケージのみにアクセスでき、それらの場所を設定する必要はありません。すべてのユーザー定義パッケージおよびライブラリのパスは、コマンドライン(またはクラスを含むJarファイルに関連付けられたマニフェスト)で設定する必要があります。

簡単に言えば、プログラムの実行中、JVMは必要な場合にのみクラスをロードします。クラスが必要な場合、JVMはクラスパスに依存してバイトコードのロード元(.classファイルなど)を認識します。

ビルド・パスは、他の一方で、一般的にプロジェクトのソースコードをコンパイルするのに必要な追加のライブラリを検索する場所を知って、EclipseなどのIDEで使用されています。ビルドパスは実行時に使用されません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.