# apache/groovy

**Attribution required: if you use, quote, or summarise this content, you must credit and link back to [awesome-repositories.com](https://awesome-repositories.com/repository/apache-groovy).**

5,446 stars · 1,912 forks · Java · Apache-2.0

## Links

- GitHub: https://github.com/apache/groovy
- Homepage: https://groovy-lang.org
- awesome-repositories: https://awesome-repositories.com/repository/apache-groovy.md

## Topics

`apache` `compiler` `dynamic-typing` `functional-programming` `groovy` `jvm-languages` `metaprogramming` `programming-language` `static-typing`

## Description

Groovy is a JVM programming language and metaprogramming framework that provides a Java compatible environment for building applications. It functions as a dynamic scripting language and a tool for authoring domain-specific languages, allowing for the execution of custom scripts and the creation of specialized mini-languages with concise syntax.

The project is distinguished by its ability to modify program behavior and class definitions through both compile-time and runtime metaprogramming. It utilizes a hybrid typing model that combines dynamic method resolution with optional static type checking to balance flexibility and execution performance.

The language covers a broad range of capabilities, including functional programming patterns, abstract syntax tree transformations, and the direct integration of Java libraries. It also includes security utilities for preventing SQL injection, securing XML parsing, and ensuring safe structured data parsing.

The system translates high-level syntax into JVM bytecode for execution on any compatible Java Virtual Machine.

## Tags

### Programming Languages & Runtimes

- [JVM Application Development](https://awesome-repositories.com/f/programming-languages-runtimes/jvm-application-development.md) — Enables the creation of software targeting the Java Virtual Machine using concise syntax and hybrid typing. ([source](https://github.com/apache/groovy/blob/master/README.adoc))
- [Programming Languages](https://awesome-repositories.com/f/programming-languages-runtimes/programming-language-varieties/programming-languages/jvm-languages/programming-languages.md) — Provides a high-level programming language targeting the JVM that supports both dynamic and static typing.
- [Class Extensions](https://awesome-repositories.com/f/programming-languages-runtimes/class-method-definitions/class-extensions.md) — Allows injecting new instance or static methods into existing types using external descriptor files and extension modules. ([source](https://github.com/apache/groovy/blob/master/ARCHITECTURE.md))
- [Runtime Meta-Class Extensions](https://awesome-repositories.com/f/programming-languages-runtimes/class-method-definitions/class-extensions/runtime-meta-class-extensions.md) — Injects new methods into existing classes at runtime by modifying underlying class definitions via meta-classes.
- [Dynamic Method Dispatch](https://awesome-repositories.com/f/programming-languages-runtimes/dynamic-method-dispatch.md) — Resolves method calls at runtime using a call site mechanism to support flexible typing and late binding.
- [Java Interoperability](https://awesome-repositories.com/f/programming-languages-runtimes/java-interoperability.md) — Enables direct integration and interoperability with Java libraries and classes within the same virtual machine.
- [Metaprogramming](https://awesome-repositories.com/f/programming-languages-runtimes/language-features-paradigms/language-features/metaprogramming.md) — Modifies program logic and class definitions at runtime or compile-time to automate patterns and extend object capabilities.
- [Metaprogramming Frameworks](https://awesome-repositories.com/f/programming-languages-runtimes/metaprogramming-frameworks.md) — Implements a framework for modifying program behavior and class definitions at both compile-time and runtime.
- [Domain Specific Languages](https://awesome-repositories.com/f/programming-languages-runtimes/programming-language-varieties/domain-specific-languages.md) — Provides tools for creating specialized mini-languages with concise syntax to describe business logic or configurations.
- [DSL Implementation Toolkits](https://awesome-repositories.com/f/programming-languages-runtimes/programming-language-varieties/domain-specific-languages/dsl-implementation-toolkits.md) — Offers a framework for implementing the lexing, parsing, and generation phases of domain-specific languages.
- [Hybrid Typing Systems](https://awesome-repositories.com/f/programming-languages-runtimes/programming-language-varieties/programming-languages/type-systems/type-checking-disciplines/statically-typed-languages/statically-typed-implementations/hybrid-typing-systems.md) — Combines dynamic method resolution with optional static type checking within a single language runtime.
- [Scripting Languages](https://awesome-repositories.com/f/programming-languages-runtimes/programming-language-varieties/scripting-languages.md) — Provides a flexible language for executing custom scripts and automating tasks without application boilerplate.
- [JVM Bytecode Compilers](https://awesome-repositories.com/f/programming-languages-runtimes/runtime-bytecode-compilation/jvm-bytecode-compilers.md) — Translates high-level syntax into compatible Java bytecode for execution on the Java Virtual Machine.
- [Scripting Runtimes](https://awesome-repositories.com/f/programming-languages-runtimes/runtime-execution-environments/scripting-runtimes.md) — Evaluates code snippets without a full application structure by bypassing traditional boilerplate and compilation steps.
- [Call-Site Caching](https://awesome-repositories.com/f/programming-languages-runtimes/call-site-caching.md) — Implements call-site caching to optimize dynamic method calls by reusing resolution results for subsequent invocations.
- [Functional Programming Patterns](https://awesome-repositories.com/f/programming-languages-runtimes/functional-programming-patterns.md) — Supports processing data and performing transformations using logic based on functional programming paradigms. ([source](https://github.com/apache/groovy/blob/master/DOAP.rdf))
- [Custom Type Checking Rules](https://awesome-repositories.com/f/programming-languages-runtimes/type-relationship-verification/type-checking/custom-type-checking-rules.md) — Supports adding custom type checking rules via scripts to modify static analysis and catch coding errors. ([source](https://github.com/apache/groovy/blob/master/ARCHITECTURE.md))

### Development Tools & Productivity

- [Code Prototyping](https://awesome-repositories.com/f/development-tools-productivity/interactive-prototyping/code-prototyping.md) — Executes code snippets and automates tasks quickly without extensive application boilerplate or project structures.

### Software Engineering & Architecture

- [Abstract Syntax Tree Transformations](https://awesome-repositories.com/f/software-engineering-architecture/compile-time-code-generation/compile-time-hooks/abstract-syntax-tree-transformations.md) — Provides capabilities to rewrite and generate AST nodes during compilation to implement custom language features and reduce boilerplate.
- [Runtime Metaprogramming](https://awesome-repositories.com/f/software-engineering-architecture/software-architecture/architectural-patterns/abstraction-domain-modeling/compile-time-architectural-patterns/compile-time-metaprogramming/runtime-metaprogramming.md) — Enables modifying program behavior and structure at both compile-time and runtime to automate tasks. ([source](https://github.com/apache/groovy#readme))
- [Static Type Checking](https://awesome-repositories.com/f/software-engineering-architecture/static-type-checking.md) — Performs compile-time type validation to bypass dynamic dispatch and increase execution performance.

### DevOps & Infrastructure

- [Custom Script Executions](https://awesome-repositories.com/f/devops-infrastructure/server-side-hook-enforcement/custom-script-executions.md) — Provides the ability to execute custom logic via scripts to bypass full application structures. ([source](https://github.com/apache/groovy#readme))
