libjvm
libraryPL/Java installation requires knowing the filesystem paths
to some items produced by the build, and also to the libjvm
(or just jvm
on some platforms, like Windows)
shared object for the Java Runtime Environment that is to be used.
To find that object can be a bit of an exercise, because of
the variety of locations and naming schemes for the Java runtime on
different platforms. It may be simplest to do a filesystem search for
the name libjvm.*
under the Java home directory (which is reported
by mvn -v
assuming the JRE that you used for running Maven is the
one you intend to use at run time).
The filename extension may be .so
on many systems, .bundle
on Mac OS X
(see the Mac OS X build notes for more about OS X),
or .dll
on Windows. As Windows also leaves off the lib
in front, on
that platform you would look for jvm.dll
.
If a tool such as Linux strace
is available to see what files are opened
by a process, this works:
strace -e open java 2>&1 | grep libjvm
The methods above may find the libjvm
object on a very specific path
(for example, including the JRE vendor, major, minor, version, and patch
numbers). If that exact path is used to SET pljava.libjvm_location
in PostgreSQL, PL/Java will stop working as soon as the next Java patch
is applied.
Typical OS distributions will also provide some less specific, alias
paths to the Java runtime environment. On Linux, for example, there
may be a /usr/lib/jvm
directory with entries using only the major
and minor Java version that are symbolic links to the fully specified
JRE. By using such an alias instead of the absolutely specific Java
path, you can avoid headaches when Java is updated.
By the same token, the directory of aliases may contain a completely
generic one like jre
, linked to whichever Java version is considered
current. Using an alias that is too generic could possibly invite headaches
if the default Java version is ever changed to one your PL/Java modules
were not written for (or PL/Java itself was not built for).