Den fre 3 nov. 2023 kl 10:00 skrev Stefan Sperling <s...@apache.org>:
> On Fri, Nov 03, 2023 at 12:00:32AM -0400, Nathan Hartman wrote: > [...] > > > > > > Hi all, > > > > Previously I mentioned I plan to RM for the upcoming 1.14.3 release. > > This being my first time, I need to solve some issues first. > > > > One of these, which has been a stumbling block for me since the > > beginning, is getting the JavaHL bindings to build and test > > successfully. > > > > I have made progress on this, but not a complete breakthrough yet. > > > > The progress was discovering that I need to have $JAVA_HOME set in my > > environment; without this, our build system (in build/ac-macros/java.m4) > > fails to find javac and assigns 'none' to JAVAC; then, much later, > > 'make check-javahl' tries to call this 'none', which unsurprisingly > > doesn't work. (I was surprised that the other logic in this AC_DEFUN > > couldn't find javac without $JAVA_HOME being set, but that's a subject > > for another thread.) The clue was the use of $JAVA_HOME there. > > > > I tried various values for $JAVA_HOME but nothing that seemed sensible > > worked; based on a StackOverflow answer [1], I ended up setting > > $JAVA_HOME as follows: > > > > $ export JAVA_HOME=$(readlink -f /usr/bin/javac | sed "s:/bin/javac::") > > > > On my system, this sets $JAVA_HOME to: > > /usr/lib/jvm/java-17-openjdk-amd64 > In my case (Ubuntu 23.04), I need to use the --with-jdk argument to configure: [[[ $ ./configure --enable-javahl --with-jdk=/usr/lib/jvm/java-17-openjdk-amd64/ ]]] otherwise I get the following error message: [[[ configure: error: Cannot compile JavaHL without a suitable JDK. Please specify a suitable JDK using the --with-jdk option. ]]] Don't know if&why the build on MacOS is different. > > > > This value seems a little strange IMHO but it finally got 'configure' to > > find the JDK successfully and got me past the longstanding 'none' > > problem! > Great! There are some MacOS specific instructions in the building instructions for JavaHL [2]. Don't know if this refers to your problem or not, > > > > But then I promptly ran into the next issue: > > > > [[[ > > > > $ make check-javahl > > (snip) > > /usr/lib/jvm/java-17-openjdk-amd64/bin/java -Xcheck:jni > > > "-Dtest.rootdir=/home/nathan/ramdrive/svndev/svn-1.14.x/subversion/bindings/javahl/test-work" > > > "-Dtest.srcdir=/home/nathan/ramdrive/svndev/svn-1.14.x/subversion/bindings/javahl" > > "-Dtest.rooturl=" "-Dtest.fstype=" > > "-Djava.library.path=:/home/nathan/ramdrive/svndev/prefix/svn-1.14.x/lib" > > -classpath > "subversion/bindings/javahl/classes:/home/nathan/ramdrive/svndev/svn-1.14.x/subversion/bindings/javahl/src:" > > "-Dtest.cleanup=" "-Dtest.tests=" > > org.apache.subversion.javahl.RunTests > > Error: Could not find or load main class > org.apache.subversion.javahl.RunTests > > Caused by: java.lang.ClassNotFoundException: > > org.apache.subversion.javahl.RunTests > > make: *** [Makefile:530: check-apache-javahl] Error 1 > > > > ]]] > > > > If I understand correctly, there should be a file called > > 'RunTests.class' in one of the directories specified with -classpath > > above. Well, there are other .class files to be found there, but not > > RunTests.class. A search for RunTests with any (or no) extension in the > > 1.14.x tree gives these two RunTests.java (not .class) files: > > > > $ find . -name RunTests\* > > > ./subversion/bindings/javahl/tests/org/apache/subversion/javahl/RunTests.java > > > ./subversion/bindings/javahl/tests/org/tigris/subversion/javahl/RunTests.java > > > > Forgive me if this is something obvious, but I know almost nothing about > > the Java ecosystem. :-) > A .class is basically a .o file but for the JVM. So I guess RunTests.java was never compiled. > > > > I'll have to continue this exploration tomorrow, but I'm at least glad > > to finally have made progress on a longstanding stumbling block. > > > > Meanwhile, any clues would be appreciated! > > > > [1] https://stackoverflow.com/a/29622512 > > > > Cheers, > > Nathan > > > > In my build script (in Subversion's tree at tools/dev/unix-build/) I pass > the > following flags to Subversion's configure script if JavaHL is enabled: > > --enable-javahl=yes --with-jdk --with-jikes=no \ > --with-junit=$(DISTDIR)/$(JUNIT_DIST) > > Did you also pass --with-junit? > I did some tests and it seems that the --with-junit=/path/to/junit-X.Y.jar is causing RunTests.java to be built, I can reproduce Nathan's error if I don't add this option to configure. > > For some reason I don't recall, my build script is fetching a self-hosted > junit JAR file from here: https://stsp.name/distfiles/junit-4.10.jar > (sha256 <https://stsp.name/distfiles/junit-4.10.jar(sha256>: > 36a747ca1e0b86f6ea88055b8723bb87030d627766da6288bf077afdeeb0f75a) > The build instructions for javahl [2] say that you should download JUnit from https://junit.org/ ("4.11 has been tested"). I assume you've optimised away the step of going to the website to download the jar (I'm doing something similar for my own builds).. Given that you have self-compiled svn libraries in a non-standard prefix > you might also want to try setting LD_LIBRARY_PATH when invoking the tests. > Loading a wrong set of libsvn_*.so files would certainly cause issues, and > the > ld.so runtime linker probably won't see JVM settings like > -Djava.library.path. > > env LD_LIBRARY_PATH="/home/nathan/ramdrive/svndev/prefix/svn-1.14.x/lib" > \ > make check-all-javahl > > Hope this helps, > Stefan > Kind regards, Daniel [2] https://svn.apache.org/repos/asf/subversion/trunk/subversion/bindings/javahl/README