4 JavaHL provides a (mostly native, using JNI and javah) implementation of
5 a high level Java API for Subversion, which was originally targeted for
6 implementors of GUI clients and IDE plug-ins for Subversion. JavaHL
7 currently provides a minimal-but-complete set of APIs which expose the
8 core Subversion C API to Java. It requires a JRE 1.2+ (runtime).
10 It is currently quite mature, and can be considered for production use.
16 JavaHL should compile and run under Linux, Win32, and Mac OS X with a
19 Its build will produce both a native library (libsvnjavahl-1.so on Unix
20 or libsvnjavahl-1.dll on Win32) and a platform independent archive of
21 Java bytecode (svn-javahl.jar).
23 To build JavaHL on non-Win32 platforms, just add "--enable-javahl" to
24 the configure script's parameters. "--with-jdk" can be provided to
25 specify the path to a jdk. "--with-maintainer-mode" will compile Java
26 bytecode with debugging information. Jikes will be the preferred
27 compiler if it is auto-detected. If not auto-detected, you can force
28 its use via the "--with-jikes=path" flag to configure.
30 The following make targets are provided:
33 install-javahl install javahl
34 check-javahl run javahl tests
36 (In order to run check-javahl, you must have already installed JavaHL,
37 and you must have specified a path to a JUnit jar file with
38 --with-junit when running configure; JUnit version 3.8.1 has been
39 tested. JUnit can be downloaded from http://junit.sf.net/ .)
44 After building libsvnjavahl.dynlib, you must rename it to
45 libsvnjavahl.jnilib. Additionally, it should probably be installed in
46 /Library/Java/Extensions instead of wherever the build system chose to
47 install it; patches to our build system to do this automatically are
52 In MS Visual Studio, make sure that the bin directory of the JDK is in
53 your path and that the include and the include\win32 directories are
56 To build, use the project/target "__JAVAHL__" of the main subversion
57 workspace. The private project/workspace is not used anymore.
63 Subclipse, Eclipse IDE plug-in <http://subclipse.tigris.org/>
65 Svn-Up, Swing GUI and plug-in for the IDEA IDE
66 <http://svnup.tigris.org/>
69 Why not 100% pure Java?
70 -----------------------
72 Though 100% pure Java is often preferred by Java programmers, such an
73 implementation would require significant effort to create, debug, and
74 update a duplicate of _at least_ the entire Subversion client libraries
75 in Java, taking the maintainers' time away from improving Subversion
76 itself. The official Subversion C libraries are the reference
77 implementation of a Subversion client's logic, and are the most robust
78 client implementation available. Using JNI allows the effort that has
79 gone into the existing libraries to be leveraged from Java, and allows
80 developer time to me more efficently spent on further development of the
81 underlying libraries shared by many implementations.
83 The SVNKit <http://svnkit.com/> client library (formerly known as
84 JavaSVN) is a 100% pure Java implementation, and attempts to track the
85 latest changes to Subversion's core libraries; however, this is an
86 independent project and the Subversion project cannot make any promises
87 as to its compatibility with the official Subversion implementation.
93 o Expose more of Subversion's core libraries through JNI.
94 o More JUnit test cases.
95 o Improve JavaDoc and coding style.