1. 概要

Classpath は、Javaの世界で不可欠な概念です。 Javaアプリケーションをコンパイルまたは起動すると、JVMはクラスパス内のクラスを見つけてロードします。

クラスパスの要素は、 java / j avacコマンドの-cpオプション、またはCLASSPATH環境のいずれかを使用して定義できます。変数。 クラスパスを設定するためにどのアプローチを採用する場合でも、クラスパス構文に従う必要があります。

このクイックチュートリアルでは、クラスパス構文、特にWindowsおよびLinuxオペレーティングシステムのクラスパスセパレータについて説明します。

2. クラスパスセパレータ

クラスパスの構文は実際には非常に単純です。パス区切り文字で区切られたパスのリストです。 ただし、パス区切り文字自体はシステムに依存します。

Microsoft Windowsシステムではセミコロン(;)が区切り文字として使用されますが、Unixライクなシステムではコロン()が使用されます。

# On Windows system:
CLASSPATH="PATH1;PATH2;PATH3"

# On Linux system:
CLASSPATH="PATH1:PATH2:PATH3"

3. Linuxの誤解を招くマニュアルページ

クラスパスセパレータは、オペレーティングシステムによって異なる可能性があることを学びました。

ただし、LinuxのJava man ページを詳しく見ると、クラスパス区切り文字はセミコロン(; )であることがわかります。

たとえば、最新(ver.17)のOpenJDKのjavaコマンドのmanページには次のように表示されます。

–class-path クラスパス、 -classpath クラスパス、または -cp クラスパスセミコロン(; )で区切られたディレクトリ、JARアーカイブのリスト、およびクラスファイルを検索するためのZIPアーカイブ。 …

また、正確なテキストは OracleJDKのマニュアルに記載されています。

これは、Javaが現在異なるシステムに同じ手動コンテンツを使用しているためです。 対応するバグの問題が今年初めに作成されました。

さらに、Javaは、パス区切り文字がFileクラスのpathSeparatorCharフィールドにシステム依存していることを明確に文書化しています。

4. 結論

この短い記事では、さまざまなオペレーティングシステムでのクラスパス構文について説明しました。

さらに、LinuxのJavaマニュアルページでパス区切り文字に関するバグについて説明しました。

パス区切り文字はシステムに依存することに注意してください。 コロンはUnixライクなシステムで使用されますが、MicrosoftWindowsシステムではセミコロンが使用されます。