Running Java applications with Notes on macOS
My main work computer is a MacBook running macOS. Thank to Logitech, they keyboard is just fine. As you know macOS neither features Domino Designer or Domino Admin. For recent development I wanted to make sure that my applications can run on the client (I've done that before).
Java, Java on the wall, what's the right path of them all?
On macOS that led to a particular situation. The jvm packaged with the
HCL Notes.app can be found in the path
HCL Notes.app/jre/Contents/Home with
lib/ext as we can expect from a JVM. Suspiciously absent are
njempcl.jar. They can be located at
While this isn't an issue for the Notes client, it is an obstacle when you try to run an external jar file.
java -jar somejar.jar ignores any classpath setting outside the JVM and only loads resources from the default JBM path (lib/ext).
I suspect the separation was neccesary due to the AdoptOpenJDK distribution rules.
To solve this, we can use a start script that creates a symbolic link in the right place. Takeing the usual suspects like
LD_LIBRARY_PATH into account we end with a script like this:
#!/bin/bash # MacOS Keep Starter file # Keep locations - update as needed - leave the TLS stuff empty if you don't have it export KEEPJAR=$HOME/keep/projectkeep.jar export LOG_DIR=$HOME/keep/logs export TLSFile=$HOME/keep/private/demoserver.projectkeep.io.pfx export TLSPassword=supersecret # Don't change anything below unless you are sure what you are doing # Java files places unfortunately troublesome, so we link some cd /Applications/HCL\ Notes.app/jre/Contents/Home/lib/ext export SRCDIR="../../../../../Contents/MacOS/jvm/lib/ext" if [ ! -f njempcl.jar ]; then ln -s $SRCDIR/njempcl.jar . echo "Linked njempcl.jar" fi if [ ! -f Notes.jar ]; then ln -s $SRCDIR/Notes.jar . echo "Linked Notes.jar" fi if [ ! -f websvc.jar ]; then ln -s $SRCDIR/websvc.jar . echo "Linked websvc.jar" fi # Local Keep Server export DEBUG=true export PATH=/Applications/HCL\ Notes.app/Contents/MacOS:$PATH export JAVA_HOME=/Applications/HCL\ Notes.app/jre/Contents/Home export GodMode=true export DYLD_LIBRARY_PATH=/Applications/HCL\ Notes.app/Contents/MacOS export LD_LIBRARY_PATH=/Applications/HCL\ Notes.app/Contents/MacOS echo $LD_LIBRARY_PATH .. cd $HOME/Library/Application\ Support/HCL\ Notes\ Data /Applications/HCL\ Notes.app/jre/Contents/Home/bin/java -jar $KEEPJAR cd ~ echo Done!
This script presumes thay we have admin permissions. We could contemplate to check for existing symbolic links and remove the ones we did set. I decided, that smells too much like YAGNI.
As usual: YMMV