javaライブラリの作成と利用

そういえば,今までライブラリという形できちんと管理していなかったため,ここらへんの基礎知識が皆無
今さらかなり恥ずかしいが,忘れないようにメモ

ライブラリクラスの作成

適当な場所にライブラリを作成する.package文を忘れずに
(./mytools/hoge/Hoge.java

package mytools.hoge;

public class Hoge{
	public void printHoge(){
		System.out.println("Hoge!");
	}
}

利用するjavaファイルの作成

このクラスを利用するためには,以下のようなimport文を挿入すればよい.
(./HogeDemo.java

import mytools.hoge.Hoge;

class HogeDemo{
	public static void main(String args[]){
		Hoge hoge = new Hoge();
		hoge.printHoge();
	}
}


この際,上記のようにjava/javac実行パスからの相対パスが./mytools/hoge/Hoge.classでないとNoClassDefFoundErrorが返ってくる.
classpath環境変数にパスを追加してもよいけれど,いちいち再設定するのが面倒くさい場合,コマンドラインオプションで指定することができる.

% javac -classpath <省略>/mytools/hoge;. HogeDemo.java


クラスパスはセミコロンで区切って複数指定することができる.ここで./を指定しているが,.は通常使用するので環境変数に設定したほうがよろし.
こんな感じで,自分でつくったライブラリを利用できるようになりました.

jarファイルの作成と利用

さぁ,jarライブラリを作成しよう,ということでjarコマンドで作成.
基本的なオプションはtarといっしょ.zオプションがないくらいが違い.

% jar vcf myjar.jar mytools


上記コマンドの意味は,mytoolsディレクトリ以下のライブラリを圧縮して,myjar.jarという名前でひとつにしてしまえ,ということ.


なぜかjarファイルをclasspathで指定すると,javacする際にコンパイル対象のファイルの位置(たいてい.)も同時に指定しなければならない.

% javac -classpath ./myjar.jar;. HogeDemo.java
% java -classpath ./myjar.jar;. HogeDemo


これは,ディレクトリ構造のライブラリの場合には起こらない(Windowsコマンドプロンプト使用時)
理由が理解できていないので,後日分析予定.
次回はJavadocの作成方法とアノテーション方法についてメモする予定,と無理やり引きをつくってみる