Java guidelines questions
Jerry James
loganjerry at gmail.com
Fri Aug 22 15:30:07 UTC 2008
I have some questions about the Java packaging guidelines with respect
to native libraries [1]. JNI using packages must put the JAR and .so
in %{_libdir}/%{name}, and use System.load() with a full path instead
of using System.loadLibrary(). I guess this is for multilib
situations, so you can have multiple JARs, each pointing to the
correct .so. Since that full path can start with either /usr/lib or
/usr/lib64, how have others generated that full path?
Wouldn't it be better to have a single JAR in /usr/share/java, and
choose the correct path with the os.arch system property (which,
annoyingly, is "amd64" with OpenJDK and "x86_64" with gcj on my
machine)? We have to pass a full path to System.load() anyway, so I
don't see the advantage of having the JAR under %{_libdir} in that
case. Has there been any thoughts around providing a Fedora-specific
JAR to hide the details of native library loading? (Maybe
"Fedora.loadLibrary()"?)
Also, I know how to generate a .so with GCJ using aot-compile-rpm.
How is this supposed to work for applications? Say I have a JAR file
with a main method, and a wrapper script to invoke it in %{_bindir}.
On a system that uses GCJ primarily, does that wrapper script do the
right thing (invoke the gcj-compiled code)?
Finally, does anybody know why "gcj --target-help" sends this to stderr?
cc1: warning: command line option
"-fbootclasspath=./:/usr/share/java/libgcj-4.3.0.jar" is valid for
Java but not for C
References:
[1] https://fedoraproject.org/wiki/Packaging/Java#Packaging_JAR_file
Thanks,
--
Jerry James
http://loganjerry.googlepages.com/
More information about the fedora-devel-list
mailing list