Java Development documentation for the dotCMS Content Management System

The development section explains how to setup a java development environment to customize or extend dotCMS.  The recommended way to extend dotCMS is through the use of plugins. Developing customizations using plugins isolates custom code from the core of dotCMS and helps to insure a clean upgrade path moving forward.  In dotCMS there are two different kinds of plugins that serve different purposes.

  • Static Plugins:  Static plugins are deployed at configuration time and require an application server restart/reload for them to take effect.  Static plugins provide Administrators and developers a way:
    • To override any file in the dotCMS distribution, making them an ideal way to Config your dotCMS installation.  This make your "Config" in dotCMS portable and repeatable.
    • To provide .jar and packages directly to your App server (e.g into the /endorsed folder).
    • An easy way to provide and override static files that are shipped with the dotCMS distribution.
    • To easily interact with the dotCMS dotCMS classloader and Singletons running within dotCMS.

  • Dynamic Plugins:  Dynamic Plugins, or OSGi based plugins, can be deployed and hot-swapped at runtime without needing an application server restart/reload.  Dynamic plugins are :
    • Easy to develop and deploy on a running dotCMS system
    • Provide methods to easily provide new functionality in dotCMS via understandable extension points.
    • Provide a separate class loading environment in which you can deploy different versions of libs than those provided by dotCMS out of the box.
    • Can also interact with dotCMS's classloader to override any class inside dotCMS.
    • Can be push-published between environments.
    • Just OSGi bundles.

While not strictly necessary, we recommend that you use an IDE while developing plugins.  We provide specific instructions on how to get started with Setting up the Development Environment, but you can use other IDEs to suit your preference.