* is an agile and dynamic language for the Java Virtual Machine
* builds upon the strengths of Java but has additional power features inspired by languages like Python, Ruby and Smalltalk
* makes modern programming features available to Java developers with almost-zero learning curve
* supports Domain-Specific Languages and other compact syntax so your code becomes easy to read and maintain
* makes writing shell and build scripts easy with its powerful processing primitives, OO abilities and an Ant DSL
* increases developer productivity by reducing scaffolding code when developing web, GUI, database or console applications
* simplifies testing by supporting unit testing and mocking out-of-the-box
* seamlessly integrates with all existing Java objects and libraries
* compiles straight to Java bytecode so you can use it anywhere you can use Java
Think of Groovy is a much cleaner, easier to use, and more powerful version of Java. Groovy code often looks and feels like Java code, but is almost always simpler and easier to use. Groovy also goes beyond Java and incorporates modern language developments, like builders, closures, and metaprogramming.
If you know Java, Groovy is very easy to learn. You can also add it to your project incrementally -- you don't have to replace all of your Java code with Groovy. You can instantiate Java classes and use them inside Groovy code, and vice versa.
I use Groovy for what it does well (short, clear scripts; XML generation and manipulation; testing, and more) and Java for what it does well, like library code, integrating with legacy apps, and frameworks.
I find that anything I can do in Java, I can do in Groovy with about 1/3 as many lines and wind up with cleaner, easier to read code.