The Full Wiki

Groovy (programming language): Wikis


Note: Many of our articles have direct quotes from sources you can cite, within the Wikipedia article! This article doesn't yet, but we're working on it! See more info or our list of citable articles.


From Wikipedia, the free encyclopedia

Groovy groovy.png
Paradigm Object-oriented, scripting
Appeared in 2003
Designed by JCP
Developer Guillaume Laforge
(Project Manager and
JSR-241 Spec Lead)
Stable release 1.7.0 (2009-12-22; 26 days ago)
Typing discipline Dynamic, strong, duck
Influenced by Java, Python, Ruby, Perl, Smalltalk, Objective-C
OS Cross platform (JVM)
License Apache License v2.0

Groovy is an object-oriented programming language for the Java platform, and is the second standard language for the Java platform, the first being the Java programming language.[1] It is a dynamic language with features similar to those of Python, Ruby, Perl, and Smalltalk. It can be used as a scripting language for the Java Platform.

Groovy uses a Java-like bracket syntax. It is dynamically compiled to Java Virtual Machine bytecode and works seamlessly with other Java code and libraries. Most Java code is also syntactically valid Groovy.

Groovy 1.0 was released on January 2, 2007.



Some Groovy code looks like it would in the Java language, but Groovy is not a superset of Java. For instance, Groovy does not support Java's classic for loop syntax.[2] However, barring a few incompatibilities, one can usually rename a .java file to a .groovy one and it will work. Groovy allows the coder to leave out some elements which are required in Java, so Groovy code can be more compact.[3] This makes the Groovy learning curve for Java developers gradual, since they can start with Java syntax and gradually learn to add Groovy features.[4]

Groovy features not available in Java include both static and dynamic typing (with the def keyword), closures, operator overloading, native syntax for lists and associative arrays (maps), native support for regular expressions, polymorphic iteration, expressions embedded inside strings, additional helper methods, and the safe navigation operator "?." to automatically check for nulls (for example, "variable?.method()", or "variable?.field").[5]

Groovy's syntax can be made far more compact than Java. For example, a declaration in Standard Java 5+ such as:

 for (String it : new String[] {"Rod", "Carlos", "Chris"})
     if (it.length() <= 4)

can be expressed in Groovy as:

 ["Rod", "Carlos", "Chris"].findAll{it.size() <= 4}.each{println it}

Groovy provides native support for various markup languages such as XML and HTML, accomplished via an inline DOM syntax. This feature enables the definition and manipulation of many types of heterogeneous data assets with a uniform and concise syntax and programming methodology.

Unlike Java, a Groovy source code file can be executed as an (uncompiled) script, if it contains code outside any class definition, or if it is a class with a main method, or is a Runnable or GroovyTestCase. But, unlike other script languages such as Ruby, a Groovy script is fully parsed, compiled, and generated before execution. (This occurs under the hood, and the compiled version is not saved as an artifact of the process.)[6]

GroovyBeans are Groovy's version of JavaBeans. Groovy implicitly generates accessor and mutator methods. In the following code, setColor(String color) and getColor() are implicitly generated; and the last two lines, which appear to access color directly, are actually calling the implicitly generated methods.[7]

class AGroovyBean {
  String color
def myGroovyBean = new AGroovyBean()
myGroovyBean.setColor('baby blue')
assert myGroovyBean.getColor() == 'baby blue'
myGroovyBean.color = 'pewter'
assert myGroovyBean.color == 'pewter'

Groovy offers simple, consistent syntax for handling lists and maps, reminiscent of Java's array syntax.[8]

def movieList = ['Dersu Uzala', 'Ran', 'Seven Samurai']  //looks like an array, but is a list
assert movieList[2] == 'Seven Samurai'
movieList[3] = 'Casablanca'  //adds an element to the list
assert movieList.size() == 4
def monthMap = [ 'January' : 31, 'February' : 28, 'March' : 31 ]  //declares a map
assert monthMap['March'] == 31  //accesses an entry
monthMap['April'] = 30  //adds an entry to the map
assert monthMap.size() == 4


James Strachan first talked about the development of Groovy in his blog in August 2003. Several versions were released between 2004 and 2006. After the JCP standardization process began, the version numbering was changed and a version called "1.0" was released on Tuesday, January 2, 2007. After various betas and release candidates numbered 1.1, on December 7, 2007, Groovy 1.1 Final was released and immediately rebranded as Groovy 1.5 as a reflection of the great improvement made.


Groovy has been described as a "mistake" [9] after Strachan wrote on his blog [10]

I can honestly say if someone had shown me the Programming in Scala book by Martin Odersky, Lex Spoon & Bill Venners back in 2003 I'd probably have never created Groovy.

IDE support

Many integrated development environments support Groovy:

See also



External links

Got something to say? Make a comment.
Your name
Your email address