こんにちは!フリーランスの長野です。
Javaって使ってますか?Javaはソースコードを書くだけでは実行することはできません。
環境変数を設定したり、コンパイルする必要があります。また、複数のクラスが別々のフォルダに作成されるとクラスパスを設定する必要があります。
この記事では、Javaのクラスパスについて
- classpath(クラスパス)とは
- コマンドで設定する方法
- 環境変数で設定する方法
という基本的な内容から
- classpath(クラスパス)を確認する方法
- classpath(クラスパス)を取得する方法
- jarにクラスパスを設定する方法
など応用的な内容についても解説していきます。
今回はJavaのクラスパスについて、わかりやすく解説します!
なお、Javaの記事については、こちらにまとめています。
classpath(クラスバス)とは?
クラスパスは、Javaの実行環境がクラスファイルやほかのソースファイルを検索するためのパスです。複数のクラスを使用する場合にクラスパスを考慮する必要があります。
mainメソッドが記述されているソースコードと同じフォルダ内に他のソースファイルも保存されていれば、クラスファイルを設定する必要はありません。
他のフォルダにソースファイルやクラスファイル、jarファイルなどを保存している場合はクラスパスを設定する必要があります。クラスパスを設定する方法には2種類あります。
コマンドでコンパイルや実行するときに-classpathオプションを指定する方法と、CLASSPATH環境変数を設定する方法です。
パソコンのOSがWindowsの場合とLinuxの場合でコマンドの記述が異なりますので、それぞれの場合で説明していきます。
コマンドで設定する方法
まずコマンドで設定する方法ですが、その前にコマンドでコンパイルや実行する方法について確認しておきましょう。
コマンドでコンパイルや実行する方法については、こちらで詳しく解説していますので、ぜひこちらを参考にしてください。
Windowsの場合
サンプルコードを使って説明します。使うサンプルコードは次の2つのファイルです。
Hello.javaファイルはフォルダHelloの中に保存しています。Main.java:
public class Main { public static void main(String[] args) { Hello hello = new Hello(); } }
Hello/Hello.java:
public class Hello { public Hello() { System.out.println("Hello World!"); } }
実行結果:
サンプルコードのようにjavacコマンド、javaコマンドで-classpathオプションを設定します。-classpathは-cpと省略して記述することもできます。
コマンドを実行するフォルダはmainメソッドが記述されたJavaファイルが保存してあるフォルダです。
複数のパスを「;」(セミコロン)で区切ります。「;」(セミコロン)の前の「.」(ドット)は相対パスで現在のフォルダを指定するときに使います。
Linuxの場合
Linuxの場合は複数のパスの区切りが「:」(コロン)になります。
実行結果:
環境変数で設定する方法
Windowsの場合
この他にも環境変数CLASSPATHをセットすることでクラスパスを設定することが可能です。
例えば次のようにコマンドを入力、実行します。
set CLASSPATH=.;Hello
このあとにjavacコマンド、javaコマンドを-classpathオプションなしで実行します。
また、クラスパスの設定を解除する場合は下記のとおりです。
set CLASSPATH=
Linuxの場合
またLinuxで環境変数CLASSPATHをセットする場合には以下のようにコマンドを入力、実行します。
CLASSPATH=.:Hello; export CLASSPATH
実行結果:
クラスパスを設定した後に「;」(セミコロン)を記述します。
解除する場合は以下のとおりです。
unset CLASSPATH
クラスパスを確認する方法
実行時に指定したクラスパスを確認することができます。
-verboseオプションを使って「-verbose:class」と指定します。
java -verbose:class Main
-verboseオプションは詳細なメッセージを表示するためのオプションです。
オプションについてはこちらで詳しく解説していますので、ぜひ参考にしてください。
クラスパスを取得する方法
クラスパスをJavaプログラムから取得することもできます。
getPropertyメソッドを使います。Hello/Hello.java:
public class Hello { public Hello() { System.out.println(System.getProperty("java.class.path")); } }
実行結果:
jarにクラスパスを設定する方法
jarファイルとは、Javaのファイルを1つにまとめて圧縮したファイルのことです。
ここまでのサンプルコードで例えばHelloフォルダ内のクラスファイルをjarファイルにまとめて、そのjarファイルとMain.javaクラスを使って処理するということをやってみましょう。
Helloフォルダのファイルを2つに増やします。Hello/Hello1.java:
public class Hello1 { public Hello1() { System.out.println("Hello World!"); } }
Hello/Hello2.java:
public class Hello2 { public Hello2() { System.out.println("Hello Java!"); } }
この2つのファイルをMain.javaファイルから使用します。
Main.java:
public class Main { public static void main(String[] args) { Hello1 hello1 = new Hello1(); Hello2 hello2 = new Hello2(); } }
まずはこれまでどおり、クラスパスを指定してコンパイルします。
コンパイルできたら、HelloフォルダでHello1.classとHello2.classファイルをHello.jarファイルに圧縮します。
Hello.jarファイルとMain.javaクラスを使ってコンパイルをします。Hello.jarファイルを指定するのに-classpathオプションを使いますが、設定の方法はこれまでと同じです。
ただし注意すべき点が1点あります。実行する際にはjarファイルの指定後に「;」(セミコロン)が必要です。
また、Hello.jarファイルとMain.javaクラスを使ってコンパイルした後にjarファイルにまとめて実行することもできます。
この場合はマニフェスト内の「Class-Path」にjarファイルを指定します。manifest.mf:
Class-Path: Hello.jar Main-Class: Main
jarコマンドの使い方については、こちらで詳しく解説していますので、ぜひ参考にしてください。
まとめ
今回はJavaのクラスパスについて解説してきましたが、いかがでしたか?Javaではプログラミングをする際にたくさんのクラスを作成します。
たくさんのクラスはフォルダごとに整理されていると、後々の修正や改良する際に探す手間が省けます。
クラスをフォルダごとに分けて保存した場合に、classpathを設定してコンパイルや実行を行う必要があります。使いこなすことができるように、この記事を何度も参考にして下さいね!