久しぶりにJavaHL
かなり以前にJavaHLを使ってみましたが、久しぶりに使う機会がありました。
ちなみに、JavaHLはここからダウンロード可能で、ソース等はここで公開されており(ViewVC)、チェックアウト等を行う場合はここから行うことが可能です。
で、Eclipse3.2(Subclipseプラグイン導入済み)上で-Djava.library.pathでlibsvnjavahl-1.dllを格納しているパスを指定して、ごにょごにょと実行。例えば以下のような感じ。
// ワーキングコピーC:/svn/testrepos以下のフォルダを再帰的にupdateする
SVNClientInterface client = new SVNClient();
long revision = client.update("C:/svn/testrepos", Revision.HEAD, true);
System.out.println("svn update, revision : " + revision);
// ワーキングコピーC:/svn/testrepos以下のファイルにおいて、新規に追加されているファイルすべてをaddし、紛失したファイルをすべてremoveする
SVNClientInterface client = new SVNClient();
Status[] status = client.status("C:/svn/testrepos", true, false, false);
for (int i=0; i'lt;status.length; i++) {
int s = status[i].getTextStatus();
if (s == StatusKind.unversioned) {
String path = status[i].getPath();
System.out.println("svn add : " + path);
client.add(path, false);
} else if (s == StatusKind.missing) {
String path = status[i].getPath();
System.out.println("svn remove : " + path);
client.remove(new String[] { path }, "", false);
}
}
んで、Eclipse上から実行したときは問題なく動作したのですが・・・それを別のマシンでコマンドプロンプトから実行した場合、java.lang.UnsatisfiedLinkErrorで動作せず。メッセージを見ると、svnjavahl.dllが見つからないって怒られているっぽい(no svnjavahl in java.library.path)。
実際にDLLのロードを行っているorg.tigris.subversion.javahl.NativeResourcesのソースを見てみると、プロパティsubversion.native.libraryで指定されたDLL→svnjavahl-1.dll→libsvnjavahl-1.dll→svnjavahl.dllの順番にロードを試みている模様。
試しに、libsvnjavahl-1.dllのファイル名をsvnjavahl.dllにリネームして実行してみると、同様にUnsatisfiedLinkErrorが発生するも、Can't find dependent librariesとメッセージが変化。
いろいろと試行錯誤してみた結果、実行している場所から参照可能な場所にSubversion本体のDLL群(binフォルダ内に入っているlibapr.dll・libapriconv.dll・libaprutil.dll・libdb44.dll・libeay32.dll・ssleay32.dll・intl3_svn.dllの7つのDLL)が必要な模様。なお、-Djava.library.pathで指定しているフォルダ(libsvnjavahl-1.dllを格納しているフォルダ)にこれらのライブラリを格納してもNGで、例えば実行時のカレントフォルダに配置するとOKです(Javaが呼び出したDLLが依存しているDLLは、PATHが通っている場所(というかjava.exeから参照可能な場所?)に置いておく必要があるってことですね)。
ファイル名を変えてエラーメッセージが変わったのは、
ってことなんでしょう。
普段からDLL等を多用するWindowsNativeアプリを開発していればすぐに気付いたのかもしれませんが、これで2時間ほど悩んでしまいました(苦笑)。
「Java」カテゴリの記事
- mod_proxy_balancerの振り分けをhttpで(2009.05.30)
- java.util.prefs.Preferences と Vista(2009.04.13)
- visualswing4eclipseで作ったアプリケーションの実行(2009.04.11)
- java.util.regex.Patternの後方参照(2009.03.24)
- Domingo(2009.03.23)
「Subversion・Trac・etc.」カテゴリの記事
- Trac:文字列項目での範囲指定(2009.07.08)
- ZipPackageDownload修正版(2009.04.12)
- TeamFile(2009.03.07)
- ExcelReportExportPluginのエントリポイント(2009.03.01)
- カスタムクエリ画面で作成日を条件に抽出したい(2009.02.28)









![アスキー: UNIX MAGAZINE (ユニックス マガジン) 2008年 01月号 [雑誌]](http://ecx.images-amazon.com/images/I/11Z7w19zJ3L.jpg)













Comments