Spring Roo's mission statement is to "fundamentally improve Java developer productivity without compromising engineering integrity or flexibility".3
The technology was first demonstrated during the opening keynote at the SpringOne Europe developer conference on 27 April 2009, with an initial alpha release concurrently being published. During the keynote an application was built live on-stage that would be used by conference attendees to vote on the preferred name for the project (which at that time was codenamed "Roo" within SpringSource).4 Ultimately the name "Spring Roo" was preferred over alternatives including Spring Boost, Spring Spark, Spring HyperDrive and Spring Dart.5
Several releases followed,67 with the Roo 1.0.0.RELEASE (general availability) released in December 2009. In October 2010, Spring Roo 1.1.0.RELEASE was released. The 1.1.0 release moved to an OSGi foundation with associated add-on discovery model, plus added support for incremental database reverse engineering, Spring MVC page complexity reduction, Google Web Toolkit, Google App Engine, Apache Solr, JSON and smaller features like serializable automation.8 The current Roo project engineers are employed by SpringSource and as such Roo releases typically support the latest available releases of other Spring portfolio projects.
In 2014 DISID takes over the leadership of the open source framework Spring Roo after the partnership agreement with Pivotal. They collaborate on further development of the Spring Roo project. Roo will continue in its goal of providing a code-gen style of RAD framework.
The Spring Roo project will remain as an open source project under Spring, maintaining the same current licensing policy. Both Pivotal and DISID are calling on the Spring and Java communities for anyone who would like to collaborate in the project.
Roo's default installation facilitates the creation of applications that comply with the following standards and major technologies:9
The above list can be augmented through additional Roo add-ons, which provide Roo's method of extensibility.
Spring Roo's main user interface is a command-line shell. The shell provides both a command-line interface and also a mechanism to host plug-ins (which are called "add-ons" in Roo). One key design goal of Roo is to ensure a user can continue to work in a "natural way", which typically means using their preferred integrated development environment (IDE) or text editor for most tasks. As such Roo is often loaded in a separate window to the IDE or text editor, and will monitor the file system for changes made by the user outside of Roo. A startup-time scan of a user's project is also performed to determine any changes that may have been made while Roo was not running.
The user interface shell supports extensive usability features including command-line completion (i.e. press TAB), online help, hinting (a form of context-sensitive help) and contextual awareness (which provides automatic inference of likely intentions based on recent activity). This allows a user to create a new software project via the Roo shell, or use Roo on an existing project. The following is an example of the commands used by Roo to create a new application plus the Spring Boot Maven plugin run goal to compile and run the application using an embedded HTTP server:
The above commands did not need to be typed in full, but rather were completed using TAB. Additionally, the "hint" command could have been used to acquire help at any time.
While there are many ways that software can automatically generate code,11 Roo operates by generating AspectJ inter-type declarations (otherwise known as mixins or introductions). This achieves separation of concerns, as the code maintained by Roo is in a different compilation unit from the code a user writes. This means Roo can incrementally modify the AspectJ inter-type declarations that it needs to and leave all other files intact.121314
Spring Roo uses add-ons to provide all the functionality within and on top of an OSGi runtime system based on Apache Felix.
There are numerous commands available in Roo, depending on which "base add-ons" (those which ship with Roo) and "third-party add-ons" (those that do not ship with Roo) have been installed. The base add-ons shipping with Roo 2.0.x include:
Roo also includes a core set of modules that provide a hosted execution environment for different add-ons. These major modules include:
Spring Roo differentiates from other convention-over-configuration rapid application development tools in the following major ways:15
"InfoWorld: SpringSource CEO to tout Roo, a new Java enhancement" by Paul Krill; Dated 2009-06-01. http://www.infoworld.com/t/development-frameworks/springsource-ceo-tout-roo-new-java-enhancement-215 ↩
"SD Times: Roo released to handle repetitive Spring tasks" Archived 2012-02-25 at the Wayback Machine by Alex Handy; Dated 2009-10-19. http://www.sdtimes.com/link/33843 ↩
"Spring Roo reference documentation", Mission Statement section; Retrieved 2010-2-21. http://static.springsource.org/spring-roo/reference/html/background.html#background-mission ↩
"Tech Videos: The Future of Java Innovation" Archived 2009-10-09 at the Wayback Machine by Rod Johnson (CEO of SpringSource); Retrieved 2009-10-17. http://www.bestechvideos.com/2009/06/11/springone-europe-2009-keynote-the-future-of-java-innovation ↩
"Spring Roo reference documentation", History section; Retrieved 2010-2-21. http://static.springsource.org/spring-roo/reference/html/background.html#background-history ↩
"InfoQ: Spring Roo 1.0 M1 Released" by Srini Penchikala; Dated 2009-5-31. http://www.infoq.com/news/2009/05/spring-roo-1.0-m1-release ↩
"Jira issue tracking for Spring Roo Project releases"; Retrieved 2010-2-21. https://jira.springsource.org/browse/ROO#selectedTab=com.atlassian.jira.plugin.system.project%3Aversions-panel ↩
"A Big Hop Forward: Spring Roo 1.1.0 Is Released!" Archived 2010-10-28 at the Wayback Machine, by Ben Alex (lead of Spring Roo at SpringSource); Retrieved 2010-10-27. http://blog.springsource.com/2010/10/27/spring-roo-1-1-0-is-released/ ↩
"TechCast: Spring Roo podcast" Archived 2010-02-23 at the Wayback Machine by Ken Rimple; Retrieved 2010-2-21. http://chariottechcast.libsyn.org/index.php?post_id=551262 ↩
"Spring Roo 1.2.4.RELEASE available now " Dated 2013-10-17. http://forum.spring.io/forum/spring-projects/roo/128539-spring-roo-1-2-4-release-available-now ↩
"InfoQ: Role of Code Generation in Java Development" by Srini Penchikala; Dated 2009-9-3. http://www.infoq.com/news/2009/09/codegen-java-development ↩
"InfoQ: Introduction to Spring Roo 1.0.0 Video Presentation", by Ben Alex (lead of Spring Roo at SpringSource); Retrieved 2010-2-21. http://www.infoq.com/presentations/Introducing-Spring-Roo ↩
"JAX Italia 2009 Conference: Spring Roo" by Massimiliano Dessì; Retrieved 2010-2-21. https://www.slideshare.net/desmax74/spring-roo-jaxitalia09 ↩
"Philadelphia Java User Group: Spring Roo" by Ken Rimple; Retrieved 2010-2-21. https://www.slideshare.net/krimple/philly-spring-ug-roo-overview ↩
"Spring Roo Home Page"; Retrieved 2010-2-21. http://www.springsource.org/roo ↩
"Sun Java 5 JavaDocs for RetentionPolicy.SOURCE" by Sun Microsystems; Retrieved 2009-10-17. http://java.sun.com/j2se/1.5.0/docs/api/java/lang/annotation/RetentionPolicy.html#SOURCE ↩
"Push-In Refactoring for AJDT" by Andrew Eisenberg (AJDT project lead at SpringSource); Retrieved 2009-10-17. http://contraptionsforprogramming.blogspot.com/2009/05/push-in-refactoring-for-ajdt.html ↩
"Eclipse AJDT intertypes and Push-In refactoring" Archived 2010-01-17 at the Wayback Machine by Dhruba Bandopadhyay; Dated 2009-12-31. http://dhruba.name/2009/12/31/eclipse-ajdt-intertypes-and-push-in-refactoring/ ↩
"Italian Java User Group JavaDay IV Conference: Spring Roo Internals" by Massimiliano Dessì; Retrieved 2010-2-21. https://www.slideshare.net/desmax74/spring-roo-internals-javaday-iv ↩
"Spring, Roo, and Alfresco Too: What Alfresco Gave to Spring and Why" by Jeff Potts; Dated 2009-12-16. http://ecmarchitect.com/archives/2009/12/16/1076 ↩