2014/01/31

Javaコマンドでクラスパスを指定する

地味に。
javaプログラムをコマンドラインで起動するのって難しいです。
メインクラスがjarの中の場合、フォルダの中(パッケージの中)の場合、クラスパスが必要な場合、jarライブラリを読み込まないといけない場合など、いろいろ合わさるともう絶望的にコマンド打てません。
ということでメモ。

基本

java <classファイル名>
もちろん「.class」は付けない。これはパッケージも使わないテストプログラムとかHelloWorldの場合。

メインクラスがJarファイルの中

java -jar <Jarファイル名>
このときはもちろん「.jar」を付ける(このようにコマンドで起動できるjarファイルを作るには中のマニフェストファイルをちゃんと作れば良い)。

メインクラスがパッケージの中

java jp\co\などパッケージ構成\<メインクラスファイル名>
「.class」は付けない。コンパイルするとフォルダが出来るのでついパッケージフォルダ内に移動してコマンド打ったりするがそれではダメ。パッケージのフォルダがあるフォルダでコマンドを打つ。

クラスパスを指定する(フォルダ)

java -classpath フォルダパス1;フォルダパス2;.\  <メインクラスファイル名>
ここが引っかかった。最後の「.\」はメインクラスのファイルが置いてある場所(パッケージならパッケージフォルダの場所か?)。
コマンドラインのカレントディレクトリによるが、普通は「;.\」を追加しておけば良いと思う。
メインクラスがパッケージなら
java -classpath フォルダパス1;フォルダパス2;.\   jp\co\パッケージ\<メインクラス>
jarの場合
java -jar <Jarファイル名>
jarの場合は-classpathは効かない。Jar内のマニフェストファイルに書かれたクラスパスだけになるらしい。

jarファイルをクラスパスに追加

java  -classpath <JarファイルのパスとJarファイル名>;.\  <メインクラスファイル名>
メインクラスがパッケージだったりJarファイルだったりするのは上と同じ。クラスパスは「.\commons.jar」のように「.jar」まで付ける。上記のようにjarを起動する際に-classpathでクラスパスは指定できない。
自分用のメモということでマニフェストファイルの例も残しておく。
Manifest-Version: 1.0
Ant-Version: Apache Ant 1.8.2
Created-By: 1.7.0_21-b11 (Oracle Corporation)
Main-Class: jp.co.simple_asta.test.Main
Implementation-Title: ${name}
Implementation-Version: ${version}
Implementation-Vendor: ${vendor}
Build-Id: ${ts} ([Windows 7 6.1 amd64])
Class-Path: mysql-connector-java-5.1.28-bin.jar ojdbc14.jar
まぁ重要なのはMain-ClassとClass-Pathだけかな?

0 件のコメント:

コメントを投稿