wissel.net

Usability - Productivity - Business - The web - Singapore & Twins

Creating Notes 8.5.3++ plug-ins with Eclipse 4.2


One skill that entitles you to the secret handshake is ability to develop plug-ins for the Lotus Notes clients. Sadly that is one of the technologies that held great promises (client side mashups anyone), that was clobbered by being to complicated, buggy and the rise of the "mobile first" mantra.
Still the Plug-in Jedi are with us and there are a number of wildly successful, useful and feature rich plug-ins that were contributed from outside IBM. Of course special mention goes to The Master's work.
One big stumbling block for development is the Expeditor Toolkit which is stuck on Eclipse 3.4.2 (while the current version of Eclipse is 4.2). Using the toolkit it is just a few clicks to create a runtime/debug configuration to test your plug-ins, without you are in for parameter guessing.
When searching for information you will find Mikkel's instructions for 3.5/8.5.2 and the entry in the Designer Help file (for the later one you need to know exactly what you are looking for). But both instructions won't work for Notes 8.5.3 ot 8.5.4. With the help of special friends I figured it out:
  • Install Eclipse 4.2 (Classic will do)
  • In Window - Preferences - Java - Installed JRE add the Notes JRE (I called mine Notes854)
  • In Window - Preferences - Plug-in Development - Target Platform add an new entry (based on an empty template) and add the directory location /opt/ibm/lotus/notes/framework/rcp/eclipse and /opt/ibm/lotus/notes/framework/shared/eclipse (adjust the directories to your path)
  • In Run - Run Configurations create a new Eclipse Application. Give it a name, in my example it is "SmartFile"
  • Leave the Workspace Data Location at its default ${workspace_loc}/../runtime-SmartFile
  • Run a product com.ibm.notes.branding.notes and point to the Runtime JRE you just configured (Notes854)
  • In Arguments (second tab) enter for the Program arguments (in one line):
    -personality com.ibm.rcp.platform.personality -console -pluginCustomization "${rcp_target}/../plugin_customization.ini"
  • in the VM argument enter the following. There seems to be no more need to specify variables or an installid
    -Declipse.registry.nulltoken=true
    -Dosgi.splashPath=platform:/base/../shared/eclipse/plugins/com.ibm.notes.branding
    -Djava.util.logging.config.class=com.ibm.rcp.core.internal.logger.boot.LoggerConfig
    -Dosgi.framework.extensions=com.ibm.rcp.core.logger.frameworkhook
    -Dcom.ibm.pvc.webcontainer.port=0
    -Djava.protocol.handler.pkgs=com.ibm.net.ssl.www.protocol
    -Dosgi.hook.configurators.exclude=org.eclipse.core.runtime.internal.adaptor.EclipseLogHook
    "-Xbootclasspath/a:${rcp_base}/rcpbootcp.jar"
    "-Djava.security.properties=file:${rcp_base}/rcp.security.properties" -Xss512K "-Drcp.data=${rcp_data}" "-Drcp.home=${rcp_target}/../.."

    (I don't know why some of the arguments are in quotes). Keep the working directory as default
  • In Plug-ins (3rd Tab): check all Target Platform plug-ins as well as your shiny new ones
  • In Configuration (4th tab) leave the "Use default location" On my machine:
    ${workspace_loc}/.metadata/.plugins/org.eclipse.pde.core/SmartFile
    and "Use an existing config.ini": ${rcp_base}/config.ini
  • I didn't touch Tabs 5-7
  • On my machine the Notes executable is on the path, but I don't know if that is mandatory
That's it. While you are on it, take a little refresher (keep in mind your target platform is still Eclipse 3.4.2)
As usual YMMV

Posted by on 18 September 2012 | Comments (2) | categories: Show-N-Tell Thursday

Comments

  1. posted by Christian Guedemann on Wednesday 19 September 2012 AD:
    Hello Stefan

    Are you sure that you didn't define two variable in the eclipse runtime?

    Are the values for rcp_target and rcp_data calculated by eclipse during startup?

    Best regards
    Christian

  2. posted by Lean van Heerden on Thursday 22 November 2012 AD:
    Thanks for the info.

    I had to manually specify the rcp_base, rcp_target and rcp_data variables. After that everything worked fine Emoticon cool.gif