【Java】classpathの意味や指定方法を解説!(Windows/Mac)
  • facebookページ
  • twitterページ
  • 2019.11.21

    【Java】classpathの意味や指定方法を解説!(Windows/Mac)

    クラスパス(classpath)とは?

    JVM(Java Virtual Machine: Java仮想マシン)の中でクラスファイルを読み込む仕事は、クラスローダー(class loader)という機能が行っています。

    クラスパスとは、このクラスローダーがクラスファイルを探すときに見に行くべき場所のことです。

    例えば、クラスパスに「c:¥Desktop」が指定してある場合、クラスローダーはc:¥Desktopの中にクラスファイルがあるかを探しに行くだけでよくなります。

    ポテパンダの一言メモ

    クラスパスを指定することで、高速にクラスファイルの検索が可能になるのです。

    クラスパスを指定する方法

    クラスパスを指定する方法は、以下の3通りあります。

    クラスパスを指定する3つの方法
    • 起動時にjavaコマンドで指定する
    • 検索場所をOSに登録する
    • 特に指定しない

    ひとつずつ、解説します。

    起動時にjavaコマンドで指定する

    最初の方法は、JVMをjavaコマンドで起動するときに「-cpオプション」または「-classpathオプション」を指定します。

    具体的な指定方法は以下の通りです。

    サンプルを使って実際に動かしていきましょう。

    ↓Main.java

    ↓ClassPath/ClassPath.java

    ↓実行結果(Mac)

    Macで実行しているため、複数のパスをコロン(:)で区切っています。

    コロンの前にあるドット(.)は、相対パスです。現在いるフォルダを指定する場合に使用されます。

    相対パスではなく絶対パスで実行するのであれば、以下のように記述すれば同じ実行結果が得られます。

    絶対パスで取得するときは、2行目がMainが「Main.java」に変わるので注意しましょう。

    検索場所をOSに登録する

    Javaコマンドを入力する際に、いちいち指定するのが面倒な場合は検索場所をOSに登録しておくと便利です。

    具体的には、OSの「環境変数」という設定にクラスパスを登録します。

    これによって、javaコマンドは環境変数を自動的に読み込み、クラスファイルの検索に利用してくれます。

    環境変数の設定は、WindowsとMac/Linuxの場合で異なるのでそれぞれ見ていきましょう。

    Windowsの場合

    Windowsの場合は、以下の手順で環境変数を設定できます。

    1. コントロールパネルを開く
    2. システム>システムの詳細設定を開く
    3. 詳細設定のタブを選ぶ
    4. 環境変数のボタンをクリック

    ここから、ユーザー環境変数としてクラスパスを追加し、値を設定しましょう。

    Mac/Linuxの場合

    Mac/Linuxの場合は、「(ユーザーのホームディレクトリ)/.profile」ファイルの末尾を変更します。

    例えば、「/var/javadev」をクラスパスとする場合は以下のように追記しましょう。

    特に指定しない

    検索場所をOSに登録せずjavaコマンドで指定もしない場合は、デフォルトでjavaコマンドが実行されたフォルダがクラスパスになります。

    例えば、c:¥Desktopでjavaコマンドを実行すれば、c:¥Desktopがクラスパスに設定されるといった感じです。

    クラスパスで指定できる対象

    クラスパスで指定できる対象は、以下の3つから選べます。

    クラスパスで指定できる対象3つ
    • フォルダの場所
    • クラスファイルが入ったjarファイルやzipファイル
    • 複数フォルダ、jarファイルやzipファイル、それらの組み合わせ

    ひとつずつ詳しく解説します。

    フォルダの場所

    クラスファイルが置かれている絶対パス(フォルダの場所)が指定できます。

    最も一般的な指定対象で、例えば、c:¥Desktopを指定すると、Desktopのクラスファイルが検索の対象です。

    クラスファイルが入ったjarファイルやzipファイル

    クラスファイルが入ったjarファイルやzipファイルがあれば、そのファイルの絶対パスもクラスパスの対象にできます。

    例えば、work.jarファイルがc:¥Desktop¥jarsに置いてある場合、

    と指定することで、クラスパスからクラスを読み込むことができます。

    複数フォルダ、jarファイルやzipファイル、それらの組み合わせ

    複数のフォルダやjarファイル、zipファイルをデリミタ文字で区切ってクラスパスの指定も可能です。

    デリミタ文字はOSによって異なります。

    • Windows → セミコロン(;)
    • Mac/Linux → コロン(:)

    です。

    Windowsの場合は、以下のように記述します。

    Mac/Linuxの場合は、以下のように記述します。

    クラスパスの確認方法

    プログラムを実行した際に、指定したクラスパスを確認したい時は、-verboseオプションを使いましょう。

    「-verbose:class」と指定することで、クラスをロードするたびにクラスに関する情報を表示してくれます。

    クラスパスの取得方法

    クラスパスはプログラムから取得することも可能です。

    クラスパスを取得したい場合は、getPropertyメソッドを記述して取得します。

    サンプルを見てみましょう。

    ↓Main.java

    ↓ClassPath/ClassPath.java

    ↓実行結果(Mac)

    まとめ

    Javaのクラスパスの意味や指定方法、確認方法などをご紹介しました。

    プログラムを組んでいく中でクラスは数多く使われるでしょう。

    そんなとき、クラスがフォルダごとにしっかり分かれていると、後に修正や機能の追加をするときにファイルを探すのが簡単になります。

    クラスパスを使いこなせるようになっておいて損はありません。ぜひ、この記事を参考にマスターしてください。



    優良フリーランス案件多数掲載中!
    フリーランスエンジニアの案件をお探しなら
    ポテパンフリーランス

    この記事をシェア

    • Facebookシェア
    • Twitterシェア
    • Hatenaシェア
    • Lineシェア
    pickup









    ABOUT US

    ポテパンはエンジニアと企業の最適なマッチングを追求する企業です。

    READ MORE