我正在编写一些直接使用 Subversion (SVN) Java 绑定 (JavaHL) 的代码(其中 JavaHL 包含本机库和一个瘦 Java 包装器)。在 Linux (Ubuntu 12.04) 上,这没问题:包libsvn-java
安装本机库和\usr\share\java\svn-javahl.jar
,所以我只引用后者,然后我就走了。
在 Windows 上,我知道没有将这对(JAR + 本机库)如此干净的打包在一起。我知道 SlikSVN 包含一个 JavaHL 实现,但安装它似乎只是为了安装本机库(它确实放在 PATH 上)。有什么可以提供两者的干净包装吗?(如果 SlikSVN确实打包了 JAR,那么它在我所期望的任何地方,并且搜索整个驱动器一无所获......)
作为一种解决方法,我手动构建了 JAR 文件(下面的详细信息可能对人们有用)。但似乎 Java 包装器和本机库的“匹配”非常精确:当我从后来的 SVN 源代码(而不是匹配我的确切 SlikSVN SVN 版本)构建一个 JAR 作为测试时,我在本机中遇到了致命错误代码(EXCEPTION_ACCESS_VIOLATION)。也许我很不走运,但如果它非常敏感,我需要为用户可能安装的每个潜在版本的 SlikSVN(以及因此 SVN)提供一个 JAR 库(或限制他们的 SlikSVN 选择,或者有一些倾向于-错误自动构建过程,需要他们安装 JDK)。所有不好的选择:-(
手动解决方法(糟糕!)
我有 SlikSVN 1.8.10:svn --version
报告版本1.8.10-SlikSvn-1.8.10-X64
。
所以我从标记的 SVN 版本中获得了 Java 包装器源代码。(您也可以从 主站点的源下载中获取。)
svn export http://svn.apache.org/repos/asf/subversion/tags/1.8.10/subversion/bindings/javahl/src
将这个(没有依赖项)编译成一个 JAR,并使用它,与 SlikSVN 本机库一起工作得很好。
PS 我知道我可以使用 SVNKit 来避免这样做,但我这样做是为了不依赖 SVNKit 出于许可原因(加上 JavaHL API 很好而且相当高级,还有其他更喜欢使用“官方”本机 JavaHL 实现的原因)。