Note: this blogpost only applies to camunda BPM version < 7.1.0. Starting from camunda BPM 7.2.0 we ship Groovy as part of the pre-packaged distribution.
Recently at a customer we added a ScriptTask to a process and wanted to run a Groovy script. Pretty easy with camunda BPM – but in the JBoss environment you have to know how to correctly put Groovy on the classpath – as we correctly use the JSR 223 stuff to recognize existing Scripting Languages.
To help others and to remind myself I quickly wanted to blog how to do this.
1.) Add groovy module to your JBoss
Download latest groovy-all.jar and copy it to JBOSS_HOME/modules/groovy/main/groovy-all.jar.
Create JBOSS_HOME/modules/groovy/main/module.xml with the following content:
<?xml version="1.0"
encoding="UTF-8"?>
<module
xmlns="urn:jboss:module:1.0" name="groovy">
<resources>
<resource-root path="groovy-all.jar"/>
</resources>
<dependencies>
<module name="javax.api"/>
<module name="org.apache.commons.logging"/>
</dependencies>
</module>
2.) Add dependency to groovy in the camunda engine module
Edit file JBOSS_HOME/modules/org/camunda/bpm/camunda-engine/main/module.xml. Add one line in the dependencies:
<module name="groovy"
services="import" export="true" />
Important is the services=”import” which tells JBoss to recognize the META-INF/services directory in groovy – which is does not by default. This is the small thing with normally takes some hours to solve – hope this helps somebody out there. The whole module.xml now looks more or less like this:
<module xmlns="urn:jboss:module:1.0" name="org.camunda.bpm.camunda-engine">
<resources>
<resource-root path="camunda-engine-7.0.0-Final.jar" />
</resources>
<dependencies>
<module name="javax.api" />
<module name="javax.transaction.api"/>
<module name="javax.enterprise.api" />
<module name="javax.inject.api" />
<module name="javax.ejb.api" />
<module name="javax.xml.bind.api" />
<module name="javax.servlet.api" />
<module name="org.jboss.vfs" />
<module name="org.mybatis.mybatis" />
<module name="com.fasterxml.uuid.java-uuid-generator"/>
<module name="org.joda.time" slot="2.1" />
<b><module name="groovy" services="import" export="true" /></b>
</dependencies>
</module>