Going my way

いいなと思ったことをメモしていきます。

eclipseを使っていると忘れがちなjavaのコマンドライン操作周辺知識のまとめ


Advertisements


javaを実行する際に依存関係のあるクラスは、JVMから検索可能である必要がある。
JVMの検索対象は%JAVA_HOME%/jre/lib/extや標準ライブラリに配置されたモジュールである。
/jre/lib/extディレクトリは拡張ディレクトリと呼ばれ、自動的にCLASSPATHに追加される仕組みである。

具体的には、

C:\Program Files (x86)\Java\jdk1.6.0_31\jre\lib\ext

に配置されたjarファイルならば、JVM(=javaの実行環境)から検索可能であるということである。

それ以外のクラスを利用する場合には、明示的にクラスパスを指定する必要がある。

ちなみにjarファイル内のクラスを利用する場合は、クラス名ではなく、jarファイル名を指定する必要がある。

javacコマンドでクラスファイルの出力先を指定する

tempフォルダ以下にTest.javaがある。

C:\temp\java>dir
2012/07/14  17:28    <DIR>          test
2012/07/14  17:28               100 Test.java

javacコマンドを使ってコンパイルして、classファイルを作成する。
デフォルトではカレントフォルダにclassファイルが作成される。

C:\temp\java>javac Test.java
C:\temp\java>dir
2012/07/14  17:28    <DIR>          test
2012/07/14  17:30               413 Test.class
2012/07/14  17:28               100 Test.java

ディレクトリを指定してclassファイルを出力させたい時
C:\temp\java\classes以下にclassファイルを出力させたい時はオプションに「-d フォルダ名]を指定する。

C:\temp\java>javac -d C:\temp\java\classes Test.java

C:\temp\java\classes>dir
2012/07/14  17:34               413 Test.class

このようにclasses以下にclassファイルが作成された。

注意点
javacの-dで指定するディレクトリは、指定したディレクトリが既に作成済みである必要がある。















javaコマンドの標準オプション
オプション 意味
-cp -classpathオプションの省略形であり、クラスパスを設定するために使用する
-D システムプロパティを設定するために使う



クラスパスは、クラスファイルがある場所を指定します。
例えばC:\temp\java\classesディレクトリ以下にクラスファイルFooがある場合に、
C:\temp\javaディレクトリでjavaコマンドを実行してもエラーが出てしまう。

C:\temp\java>java Foo hello
エラー: メイン・クラスFooが見つからなかったかロードできませんでした

こういうときは、-cpまたは-classpassオプションでクラスパスを指定しなければいけない。

C:\temp\java>java -cp C:\temp\java\classes Foo hello
hello

argsは引数のこと。
args[0]は第一引数を指す。

public class Foo {
	public static void main(String[] args){
		System.out.println(args[0]);
	}
}

このコードを実行するときにHelloと出力するには、引数にhelloを指定する必要がある。

C:\temp\java>java -cp C:\temp\java\classes Foo hello
hello