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