我正在编写一些直接使用 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 实现,但安装它似乎只安装了本地库(它确实放在了 PATH 上)。有什么东西可以提供两者的干净包装吗? (如果 SlikSVN 确实打包了 JAR,它不在我期望的地方,而且搜索整个驱动器也找不到任何东西......)
作为解决方法,我手动构建了 JAR 文件(下面的详细信息可能对人们有用)。但似乎 Java 包装器和 native 库的“匹配”非常精确:当我从后来的 SVN 源代码构建一个 JAR(而不是匹配我的确切 SlikSVN SVN 版本)作为测试时,我在 native 中遇到了 fatal error 代码(EXCEPTION_ACCESS_VIOLATION)。也许我不走运,但是,如果它非常敏感,我将需要为用户可能安装的每个潜在版本的 SlikSVN(以及 SVN)提供一个 JAR 库(或限制他们的 SlikSVN 选择,或者有一些容易-错误的自动构建过程需要他们安装 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 库一起工作得很好。
附言我知道我可以使用 SVNKit 来避免必须这样做,但我这样做正是为了不出于许可原因依赖 SVNKit(加上 JavaHL API 很好并且相当高级无论如何,还有其他原因更喜欢使用“官方” native 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 仅包含为 Subversion 1.7 添加的 API 的 Apache 版本。如果您使用旧版 org.tigris.subversion.javahl
包 API 来与 1.7 之前的 SVN 客户端兼容,您仍然需要手动构建 JAR。
关于java - Windows 上用于 SVN Java 绑定(bind) (JavaHL) 的配对 JAR 和 native 库二进制文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26782416/