jBPM4 Building from Source

    This page explains how to get the jbpm 4 process engine sources, the various things you can build with it and how to set up your eclipse.

    Requirements

    • JDK 5 or higher
    • Maven 2.0.9 or higher
    • Subversion

    Other build instructions

    Getting the sources

    Perform anonymous checkout of the sources like this:

    svn co http://anonsvn.jboss.org/repos/jbpm/jbpm4/trunk jbpm4

    jBPM developers should check out the sources using the following url

    svn co https://svn.jboss.org/repos/jbpm/jbpm4/trunk jbpm4

    Building the default modules

    To build the default modules run:

    [jbpm4]$ mvn clean install
    

    Before you commit, first do an update and then this command should run OK with your updates.

     

    A successfull build/test run ends like this:

    [INFO] ------------------------------------------------------------------------
     [INFO] Reactor Summary:
     [INFO] ------------------------------------------------------------------------
     [INFO] jBPM 4 ................................................ SUCCESS [7.812s]
     [INFO] jBPM 4 - API .......................................... SUCCESS [11.844s]
     [INFO] jBPM 4 - Log .......................................... SUCCESS [1.281s]
     [INFO] jBPM 4 - Test Base .................................... SUCCESS [1.110s]
     [INFO] jBPM 4 - PVM .......................................... SUCCESS [24.953s]
     [INFO] jBPM 4 - Task ......................................... SUCCESS [6.937s]
     [INFO] jBPM 4 - jPDL ......................................... SUCCESS [3.438s]
     [INFO] jBPM 4 - Examples ..................................... SUCCESS [10.047s]
     [INFO] jBPM 4 - Enterprise ................................... SUCCESS [6.359s]
     [INFO] jBPM 4 - Test DB ...................................... SUCCESS [10.922s]
     [INFO] jBPM 4 - Test POJO .................................... SUCCESS [3.109s]
     [INFO] ------------------------------------------------------------------------
     [INFO] ------------------------------------------------------------------------
     [INFO] BUILD SUCCESSFUL
     [INFO] ------------------------------------------------------------------------
     [INFO] Total time: 1 minute 28 seconds
     [INFO] Finished at: Fri Jan 16 13:45:35 CET 2009
     [INFO] Final Memory: 22M/45M
     [INFO] ------------------------------------------------------------------------

    Building the distribution

    If you're running outside the Red Hat VPN (only employees have it) you'll have to fetch the oracle driver yourself as we're not allowed to redistribute it in our public repositories.

     

    Download the oracle ojdbc14.jar driver here: http://www.oracle.com/technology/software/tech/java/sqlj_jdbc/htdocs/jdbc101040.html

     

    Then install the oracle driver into your local repository like this

    mvn install:install-file -DgroupId=com.oracle -DartifactId=ojdbc14 -Dversion=10.1.0.5 -Dpackaging=jar -Dfile=path/to/file
    

    To build the distribution,

    [jbpm4]$ mvn -Pdistro clean install
    

    In case you are working outside the Red Hat VPN and downloaded a different version of the Oracle driver, build the distribution as follows.

    [jbpm4]$ mvn -Pdistro -Doracle.version=10.1.0.5 clean install
    

    After that finishes successfully, you'll find the distribution package in modules/distro/target/jbpm-{version}.zip

    On windows you can add the schemadocs profile with -Pschemadocs. In other operating systems, the schema docs generation fails.

     

    The distribution package is also published in the repository.  (note that it's called jbpm-distro-{version}.zip in the repo)

    Build scripts

    Developer configuration

    In the following build files, configurable properties can be customized in file ${user.home}/.jbpm4/build.properties


    As a developer, at least you need to specify jbpm.parent.dir  Typically you also want to specify the jboss.distro.dir and the eclipse.distro.dir

    jbpm.parent.dir=${user.home}/jbpm
    jboss.distro.dir=${user.home}/downloads/jboss
    eclipse.distro.dir=${user.home}/downloads/eclipse
    

    JDBC properties can also be specified in files ${user.home}/.jbpm4/jdbc/${database}.properties

     

    Or properties can also be provided on the command line like:

     

    ant -Djbpm.parent.dir=/usr/jbpmbuild reinstall.jbpm

    Default values

    Here are the configurable properties and their default values as used throughout the scripts.

    <property name="database" value="hsqldb" />
    <property name="jbpm.version" value="4.0.0-SNAPSHOT" />
    <property name="jbpm.home" value="${jbpm.parent.dir}/jbpm-${jbpm.version}" />
    <property name="jbpm.filename" value="jbpm-distro-${jbpm.version}.zip" />
    <property name="jbpm.distro.dir" value="../modules/distro/target" />
    <property name="jbpm.distro.path" value="${jbpm.distro.dir}/jbpm-${jbpm.version}.zip" />
    <property name="jboss.version" value="5.0.0.GA" />
    <property name="jboss.distro.dir" value="${jbpm.home}/downloads" />
    <property name="jboss.parent.dir" value="${jbpm.home}" />
    <property name="jboss.version" value="5.0.0.GA" />
    <property name="jboss.filename" value="jboss-${jboss.version}.zip" />
    <property name="jboss.distro.dir" value="${jbpm.home}/downloads" />
    <property name="jboss.distro.filename" value="jboss-${jboss.version}.zip" />
    <property name="jboss.distro.path" value="${jboss.distro.dir}/${jboss.filename}" />
    <property name="jboss.distro.url" value="http://downloads.sourceforge.net/jboss/${jboss.distro.filename}" />
    <property name="jboss.home" value="${jboss.parent.dir}/jboss-${jboss.version}" />
    <property name="jboss.server.configuration" value="default" />
    <property name="jboss.server.config.dir" value="${jboss.home}/server/${jboss.server.configuration}" />
    <property name="eclipse.filename" value="eclipse-jee-ganymede-SR2-win32.zip" />
    <property name="eclipse.distro.url" value="http://mirror.cc.vt.edu/pub/eclipse/technology/epp/downloads/release/ganymede/SR2/${eclipse.filename}" />
    <property name="eclipse.distro.dir"  value="${jbpm.home}/downloads" />
    <property name="eclipse.parent.dir" value="${jbpm.home}" />
    <property name="eclipse.distro.path" value="${eclipse.distro.dir}/${eclipse.filename}" />
    

    qa/build.xml

    This is the build script to install jBPM and the helper scripts to drive the continuous integration.   This script is only available in the sources. Other scripts will also be available in the distribution, but this script is not.

    [jbpm4/qa]$ ant -p
    Buildfile: build.xml
         [echo] database.......... hsqldb
         [echo] jbpm.version...... 4.4-SNAPSHOT
         [echo] jbpm.home......... /home/aguizar/jbpm/jbpm-4.4-SNAPSHOT
         [echo] jbpm.distro.path.. ../modules/distro/target/jbpm-4.4-SNAPSHOT.zip
    
    Main targets:
    
     internal.enterprise.test.setup.base   reinstalls jbpm, reinstalls jboss, installs jbpm into jboss, starts jboss and then creates the jbpm schema
     reinstall.jbpm                        deletes the jbpm installation and then reinstalls jbpm
     testsuite.enterprise.setup            reinstalls jbpm, reinstalls jboss, installs jbpm into jboss, starts jboss and then creates the jbpm schema
     testsuite.enterprise.setup.for.debug  reinstalls jbpm, reinstalls jboss, installs jbpm into jboss, starts jboss and then creates the jbpm schema
     testsuite.enterprise.teardown         drops the jbpm schema and stops jboss
     testsuite.jboss.setup                 reinstalls jbpm, reinstalls jboss, installs jbpm into jboss, starts jboss and then creates the jbpm schema
     testsuite.jboss.setup.for.debug       reinstalls jbpm, reinstalls jboss, installs jbpm into jboss, starts jboss and then creates the jbpm schema
     testsuite.jboss.teardown              drops the jbpm schema and stops jboss
    

    distro/src/main/files/install/build.xml

    This script contains the targets related to installing jboss, installing jbpm into jboss and starting and stopping jboss. It also contains the targets related to creating and dropping the db  schema. This script will be part of the distro and also be usable by our users.

     

    [modules/distro/src/main/files/install]$ ant -p
    Buildfile: build.xml
    
    Main targets:
    
     clean.cfg.dir                 Deletes the ${cfg.dest.dir}
     create.cfg                    Creates a configuration in ${cfg.dest.dir}
     create.jbpm.schema            creates the jbpm tables in the database
     create.user.webapp            Generates a configuration in dir /install/generated/user-webapp
     delete.jboss                  Deletes jboss installation
     delete.tomcat                 Deletes tomcat installation
     demo.setup.jboss              installs jboss and jbpm, starts jboss, creates the db schema, deploys examples, loads example identities, installs and starts eclipse
     demo.setup.tomcat             installs tomcat, installs jbpm into tomcat, starts tomcat, creates the jBPM DB schema, deploys examples, loads example identities, installs and starts eclipse
     demo.teardown.jboss           drops the db schema and stops jboss
     demo.teardown.tomcat          stops tomcat and then the hsqldb server if needed
     drop.jbpm.schema              drops the jbpm tables from the database
     get.eclipse                   downloads eclipse to ${eclipse.distro.dir}
     get.jboss                     Downloads jboss into ${jboss.distro.dir}
     get.tomcat                    Downloads tomcat into ${tomcat.distro.dir} if it is not available
     hsqldb.databasemanager        start the hsqldb database manager
     install.eclipse               unzips eclipse, downloads eclipse if it is not available in ${eclipse.distro.dir}
     install.examples.into.tomcat  deploys all the example processes
     install.jboss                 Downloads jboss to ${jboss.distro.dir} if its not available and then unzips jboss
     install.jbpm.into.jboss       Installs jBPM into JBoss
     install.jbpm.into.tomcat      Installs jBPM into tomcat
     install.signavio.into.jboss   installs signavio into jboss
     install.signavio.into.tomcat  installs signavio into tomcat
     install.tomcat                Downloads tomcat to ${tomcat.distro.dir} if its not available and then unzips tomcat
     load.example.identities       loads the example users and groups into the database
     reinstall.jboss               Deletes the previous jboss installation and re-installs jboss
     reinstall.jboss.and.jbpm      Deletes the previous jboss installation and re-installs jboss and installs jbpm in it
     reinstall.tomcat              Deletes the previous tomcat installation and re-installs tomcat
     reinstall.tomcat.and.jbpm     Deletes the previous tomcat installation and re-installs tomcat and installs jbpm in it
     start.eclipse                 starts eclipse
     start.jboss                   starts jboss and waits till jboss is booted, then lets jboss run in the background
     start.tomcat                  Starts Tomcat and waits till it is booted, then lets Tomcat run in the background
     stop.jboss                    signals jboss to stop, but doesn't wait till its finished
     stop.tomcat                   Signals Tomcat to stop, but doesn't wait till its finished
     upgrade.jbpm.schema           Upgrades the jBPM tables in the database to the current version
    

    distro/src/main/files/examples/build.xml

    This script contains the target for deploying the examples to the database.  This script will be part of the distro and also be usable by our users.

    [modules/distro/src/main/files/examples]$ ant -p
    Buildfile: build.xml
    
    Main targets:
    
    Other targets:
    
     create.and.deploy.examples
     examples.jar
     jbpm.libs.path
     log.properties
    

    Testing against a particular database

    [jbpm4]$ mvn -Ddatabase=mysql test

    Running the test suites on another JDK

    To run the test suite on another JDK, make sure it is the default java in the path.

     

    On windows, you can do this easily by a command like this:

    set PATH=C:\Software\jdk1.6.0_07\bin;%PATH%

     

    To see what the current configured JDK is, you can check the version like this

    java -version

    Running the enterprise test suite

    [jbpm4]$ mvn -Djboss.bind.address=localhost test

    Useful maven command line options

    -DskipTests will skip execution of the test suite.

    -o will run the build offline.  Maven will not check the snapshot repositories for updates.  Saves time.

    -U will force updates of libraries

    Setting up your eclipse

    You'll need

     

    After you checked out the jbpm4/trunk, you do:

    • File --> Import...
    • General --> Existing projects into Workspace
    • Select jbpm4/trunk/modules as the root directory
    • All the modules with an eclipse project should now appear.  By default, all the checkboxes are checked
    • Click 'Finish'

     

    Eclipse will point to the libraries of your local mvn repository.  To get the libraries there, activate 'Project' --> 'Update All Maven Dependencies'

     

    Go to Window --> Preferences --> Java --> Code Style --> Formatter and import jbpm4/trunk/eclipse/jbpm.profile.xml