Spring Roo is an open-source software tool that uses convention-over-configuration principles to provide rapid application development of Java-based enterprise software. The resulting applications use common Java technologies such as Spring Framework, Java Persistence API, Thymeleaf, Apache Maven and AspectJ. Spring Roo is a member of the Spring portfolio of projects.

Motivation and history

Spring Roo's mission statement is to "fundamentally improve Java developer productivity without compromising engineering integrity or flexibility".

Spring Roo

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). Ultimately the name "Spring Roo" was preferred over alternatives including Spring Boost, Spring Spark, Spring HyperDrive and Spring Dart.

Spring Roo

Several releases followed, 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. 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.

Spring Roo

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.

Standards and technology compatibility

Roo's default installation facilitates the creation of applications that comply with the following standards and major technologies: Apache ActiveMQ (as an embedded JMS implementation) Apache Maven (version 3.2 or above) Apache Tomcat (embedded execution support) AspectJ (used for AOP plus mixins to achieve separation of concerns) AspectJ Development Tools (Eclipse plugin) Bootstrap (version 3.3.6 or above) Cloud computing (via SpringSource Cloud Foundry, Google App Engine and VMforce) Eclipse IDE (concurrent execution and project metadata creation) EclipseLink (as a JPA implementation) Hibernate (as a JPA implementation) Java Bean Validation (JSR 303) (including Hibernate Validator) Java API for XML Web Services (both services and clients) Java Message Service (both message producers and consumers) Java Persistence API (multiple implementations) Java Transaction API (via Spring transaction abstraction) Java (version 5, 6 or 7). Java 7 is supported since Roo 1.2.4. JQuery (version 1.11 or above) JSON (REST support) JUnit (automated tests for user projects) Log4J (installation and configuration) OSGi (the Roo tool is built on OSGi) Representational State Transfer (REST) Spring Boot (version 1.4 or above) Spring Data JPA (version 1.10 or above) Spring Framework (version 4 or above) Spring Security (version 4 or above) Spring Web Flow (installation and flow definition) SpringSource Tool Suite (STS has an embedded Roo shell and Roo command helpers) Thymeleaf (version 3 or above)

The above list can be augmented through additional Roo add-ons, which provide Roo's method of extensibility.

User interface

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.