Placing the libraries next to the jar works because on some platforms the working directory is in the default search path for dynamic libraries. IIRC under linux for instance java.library.path gets initialised to the current value of the LD_LIBRARY_PATH environment variable which may or may not contain ‘.’.
Here’s a wild idea that might be useful. The main problem that can’t really be worked around is that the underlying OS can’t load dynamic libraries that are located inside a jar. So what you could do is pack the library inside your jar and extract it to some temporary location just before you want to load it.
In pseudo code you could do the following
// Find the library in the jar
String libName = "myLibrary";
String sysLibName = System.mapLibraryName(libName);
InputStream libIS = getClass().getClassLoader().getResourceAsStream(sysLibName);
// Create a temp file
File tempFile = new File(System.getProperty("java.io.tmpdir") + File.seperator + sysLibName);
FileOutputStream tempFileOS = new FileOutputStream(tempFile);
// Copy from libIS to tempFileOS
....
// Load the lib
Runtime.load(tempFile.getAbsolutePath());
Then of course jogl would have to ignore the fact that it can’t load the library itself. Another potential pitfall is that mapLibraryName will probably return libjogl.so for both linux and solaris for instance, so you would need a way to distiguish between the two (possible using the os.name, os.arch, os.version system properties). This stuff is untested, unproven and there are probably many many other issues with this that I’m missing, but it’s worth a try 