久しぶりに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」カテゴリの記事
- SpringAI + Ollamaを使ったときにハマったこと(2025.07.01)
- Spring AI を使用したコンソールアプリケーションを作ってみた(2025.06.26)
- Spring AIを試してみた(with Ollama)(2025.06.01)
- Fess(2017.06.10)
- Apache-Tomcat通信で接続エラー(2012.11.01)
「Subversion・Trac・etc.」カテゴリの記事
- Kanboard(2017.06.13)
- XML parsing failed : (413 Request Entity Too Large)(2017.06.11)
- TortoiseSVNとクライアント証明書(2012.09.17)
- Trac 1.1.1(dev)(2012.09.15)
- Trac1.0 リリース(2012.09.09)
The comments to this entry are closed.























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













Comments