When you download the Spring Roo distribution ZIP, there are actually two major logical components in use. The first of these is the "Roo core", which provides an environment in which to host add-ons and provide services to them. The other component is what we call "base add-ons". A base add-on is different from a third party add-on only in that it is included in the Roo distribution by default and does not require you to separately install it. In addition, you cannot remove a base add-on using normal Roo commands.
Base add-ons always adopt the package name prefix
org.springframework.roo.addon
. We also have a part of Roo known
as "Roo core". This relates to the core modules, and these always have
package names that start with org.springframework.roo
(but
excluding those with "addon
" as the next package name segment,
as in that case they'd be a "base add-on"). Roo core provides very few
commands, and whatever commands it provides are generally internal
infrastructure-related features (like "poll status" or "metadata for id") or
sometimes aggregate the features provided by several individual base add-ons
(e.g. "entity jpa
--testAutomatically").
Add-ons that do not ship with Spring Roo but are nevertheless about to
be used with it are known as "installable add-ons" (these were previously
called "third-party add-ons", but we decided to change the name in Roo 1.1
in view that SpringSource itself was publishing add-ons that were not
shipping as part of Roo and the use of the term "third-party" was
confusing). Such add-ons do not appear under the
org.springframework.roo
package name space. A large number of
individuals and organizations publish installable add-ons, and indeed even
within the SpringSource division of VMware we have teams publishing
installable add-ons. The decision as to whether an add-on becomes a base
add-on or an installable add-on depends on a large number of factors, but in
general we prefer installable add-ons over base add-ons. This offers
flexibility around release cycles, licenses, deployment footprint, code
maintenance and so on.
Of course as a user of Roo you do not need to be aware of whether a particular component is part of Roo core, a base add-on or an installable add-on. It's just useful for us to formally define these commonly-used terms and explain the impact on whether you need to install or uninstall a component or not.
The individual base add-ons provided by Roo provide capabilities in the following key functional areas:
Project management (like project creation, dependency management, "perform" commands)
General type management (like creation of types, toString method, JavaBean methods)
Persistence (like JPA setup, entities)
Field management (like JSR 303 and field creation with JPA compliance)
Database introspection and reverse engineering
Dynamic finders (creation of finders without needing to write the JPA-QL for them)
JUnit testing (with integration and mock testing)
Spring MVC (including URL rewriting, JSP services, controller management)
Spring Web Flow
Spring Security
Selenium testing
Java Message Service (JMS)
Simple Mail Transfer Service (SMTP)
Log4J configuration
We have added dedicated chapters for many of these functional areas in this, Part II of our documentation. You can also find more introductory material concerning these areas in Part I, along with our samples, the command reference and project resources.