我正在编写一些直接使用Subversion(SVN)Java绑定(bind)(JavaHL)的代码(其中JavaHL包含 native 库和瘦Java包装器)。在Linux(Ubuntu 12.04)上,这没有问题:软件包libsvn-java将安装 native 库和\usr\share\java\svn-javahl.jar,因此我只是引用后者而已。

在Windows上,我知道没有这样的干净包装(JAR + native 库)。我知道SlikSVN包含JavaHL实现,但是安装似乎只能安装 native 库(它确实放在PATH中)。有什么东西可以给这两者一个干净的包装吗? (如果SlikSVN确实打包了JAR,那么它就在我期望的位置,并且对整个驱动器的搜索什么都找不到...)

作为一种解决方法,我手动构建了JAR文件(下面的详细信息可能对人们有用)。但是似乎Java包装程序和 native 库的“匹配”非常精确:当我从更高版本的SVN源代码(而不是与我的精确SlikSVN SVN版本匹配的)构建JAR作为测试时,我在 native 中遇到致命错误代码(EXCEPTION_ACCESS_VIOLATION)。也许我很不幸,但是,如果它很敏感,我将需要为用户可能安装(或限制其SlikSVN选择或易于使用)的每个潜在SlikSVN(以及SVN)版本提供一个JAR库。错误的自动构建过程,需要他们安装JDK)。所有不好的选择:-(

手动解决方法(错误!)

我有SlikSVN 1.8.10:svn --version报告版本1.8.10-SlikSvn-1.8.10-X64

因此,我从带标签的SVN版本中获得了Java包装器源。 (您也可以从
main site's source downloads。)

svn export http://svn.apache.org/repos/asf/subversion/tags/1.8.10/subversion/bindings/javahl/src

将其编译(没有依赖项)到JAR中,并使用它与SlikSVN native 库一起正常工作。

P.S.我知道我可以使用SVNKit来避免这样做,但是我这样做的确是为了避免出于许可原因而不依赖SVNKit(再加上JavaHL API很好并且相当高级),还有其他原因倾向于使用“官方”本地JavaHL实现)。

最佳答案

WANdisco二进制文件中应包含JavaHL。

http://www.wandisco.com/subversion/download

自从我自己使用它们已有一段时间(通常不使用Windows)。但是WANdisco具有依赖JavaHL的工具,因此我无法想象Windows二进制文件缺少JavaHL。

[问题作者进行编辑以完成详细信息]

您需要安装(Windows)Subversion客户端(而不是 SmartSVN),并确保选中将其添加到Windows PATH的复选框。它将“配对的” JAR存储在安装目录中(以及 native 库中)。 但是,WANDisco仅提供32位安装(请参阅此forum post),因此在64位Windows上不起作用。此外,JAR仅包含API的Apache版本,该版本是为Subversion 1.7添加的。如果您使用旧版org.tigris.subversion.javahl包API来与1.7之前的SVN客户端兼容,则仍然需要手动构建JAR。

10-07 19:16