CINXE.COM
Apache Groovy - Wikipedia
<!DOCTYPE html> <html class="client-nojs vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-sticky-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-feature-night-mode-enabled skin-theme-clientpref-day vector-toc-available" lang="en" dir="ltr"> <head> <meta charset="UTF-8"> <title>Apache Groovy - Wikipedia</title> <script>(function(){var className="client-js vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-sticky-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-feature-night-mode-enabled skin-theme-clientpref-day vector-toc-available";var cookie=document.cookie.match(/(?:^|; )enwikimwclientpreferences=([^;]+)/);if(cookie){cookie[1].split('%2C').forEach(function(pref){className=className.replace(new RegExp('(^| )'+pref.replace(/-clientpref-\w+$|[^\w-]+/g,'')+'-clientpref-\\w+( |$)'),'$1'+pref+'$2');});}document.documentElement.className=className;}());RLCONF={"wgBreakFrames":false,"wgSeparatorTransformTable":["",""],"wgDigitTransformTable":["",""],"wgDefaultDateFormat":"dmy", "wgMonthNames":["","January","February","March","April","May","June","July","August","September","October","November","December"],"wgRequestId":"b5f79bea-60a3-40f9-a8fc-a7638dbef106","wgCanonicalNamespace":"","wgCanonicalSpecialPageName":false,"wgNamespaceNumber":0,"wgPageName":"Apache_Groovy","wgTitle":"Apache Groovy","wgCurRevisionId":1251972389,"wgRevisionId":1251972389,"wgArticleId":508401,"wgIsArticle":true,"wgIsRedirect":false,"wgAction":"view","wgUserName":null,"wgUserGroups":["*"],"wgCategories":["Articles with short description","Short description matches Wikidata","All articles with unsourced statements","Articles with unsourced statements from May 2012","Articles with unsourced statements from November 2008","Articles with unsourced statements from June 2016","Articles with example code","Dynamically typed programming languages","Java programming language family","Java specification requests","JVM programming languages","Object-oriented programming languages", "Programming languages created in 2003","Scripting languages","Software using the Apache license","Programming languages","Dynamic programming languages","2003 software","Cross-platform free software","Cross-platform software","High-level programming languages"],"wgPageViewLanguage":"en","wgPageContentLanguage":"en","wgPageContentModel":"wikitext","wgRelevantPageName":"Apache_Groovy","wgRelevantArticleId":508401,"wgIsProbablyEditable":true,"wgRelevantPageIsProbablyEditable":true,"wgRestrictionEdit":[],"wgRestrictionMove":[],"wgNoticeProject":"wikipedia","wgCiteReferencePreviewsActive":false,"wgFlaggedRevsParams":{"tags":{"status":{"levels":1}}},"wgMediaViewerOnClick":true,"wgMediaViewerEnabledByDefault":true,"wgPopupsFlags":0,"wgVisualEditor":{"pageLanguageCode":"en","pageLanguageDir":"ltr","pageVariantFallbacks":"en"},"wgMFDisplayWikibaseDescriptions":{"search":true,"watchlist":true,"tagline":false,"nearby":true},"wgWMESchemaEditAttemptStepOversample":false,"wgWMEPageLength":40000, "wgRelatedArticlesCompat":[],"wgCentralAuthMobileDomain":false,"wgEditSubmitButtonLabelPublish":true,"wgULSPosition":"interlanguage","wgULSisCompactLinksEnabled":false,"wgVector2022LanguageInHeader":true,"wgULSisLanguageSelectorEmpty":false,"wgWikibaseItemId":"Q504453","wgCheckUserClientHintsHeadersJsApi":["brands","architecture","bitness","fullVersionList","mobile","model","platform","platformVersion"],"GEHomepageSuggestedEditsEnableTopics":true,"wgGETopicsMatchModeEnabled":false,"wgGEStructuredTaskRejectionReasonTextInputEnabled":false,"wgGELevelingUpEnabledForUser":false};RLSTATE={"ext.globalCssJs.user.styles":"ready","site.styles":"ready","user.styles":"ready","ext.globalCssJs.user":"ready","user":"ready","user.options":"loading","ext.cite.styles":"ready","ext.pygments":"ready","skins.vector.search.codex.styles":"ready","skins.vector.styles":"ready","skins.vector.icons":"ready","jquery.makeCollapsible.styles":"ready","ext.wikimediamessages.styles":"ready", "ext.visualEditor.desktopArticleTarget.noscript":"ready","ext.uls.interlanguage":"ready","wikibase.client.init":"ready","ext.wikimediaBadges":"ready"};RLPAGEMODULES=["ext.cite.ux-enhancements","ext.pygments.view","ext.scribunto.logs","site","mediawiki.page.ready","jquery.makeCollapsible","mediawiki.toc","skins.vector.js","ext.centralNotice.geoIP","ext.centralNotice.startUp","ext.gadget.ReferenceTooltips","ext.gadget.switcher","ext.urlShortener.toolbar","ext.centralauth.centralautologin","mmv.bootstrap","ext.popups","ext.visualEditor.desktopArticleTarget.init","ext.visualEditor.targetLoader","ext.echo.centralauth","ext.eventLogging","ext.wikimediaEvents","ext.navigationTiming","ext.uls.interface","ext.cx.eventlogging.campaigns","ext.cx.uls.quick.actions","wikibase.client.vector-2022","ext.checkUser.clientHints","ext.growthExperiments.SuggestedEditSession","wikibase.sidebar.tracking"];</script> <script>(RLQ=window.RLQ||[]).push(function(){mw.loader.impl(function(){return["user.options@12s5i",function($,jQuery,require,module){mw.user.tokens.set({"patrolToken":"+\\","watchToken":"+\\","csrfToken":"+\\"}); }];});});</script> <link rel="stylesheet" href="/w/load.php?lang=en&modules=ext.cite.styles%7Cext.pygments%2CwikimediaBadges%7Cext.uls.interlanguage%7Cext.visualEditor.desktopArticleTarget.noscript%7Cext.wikimediamessages.styles%7Cjquery.makeCollapsible.styles%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles%7Cwikibase.client.init&only=styles&skin=vector-2022"> <script async="" src="/w/load.php?lang=en&modules=startup&only=scripts&raw=1&skin=vector-2022"></script> <meta name="ResourceLoaderDynamicStyles" content=""> <link rel="stylesheet" href="/w/load.php?lang=en&modules=site.styles&only=styles&skin=vector-2022"> <meta name="generator" content="MediaWiki 1.44.0-wmf.4"> <meta name="referrer" content="origin"> <meta name="referrer" content="origin-when-cross-origin"> <meta name="robots" content="max-image-preview:standard"> <meta name="format-detection" content="telephone=no"> <meta property="og:image" content="https://upload.wikimedia.org/wikipedia/commons/thumb/3/36/Groovy-logo.svg/1200px-Groovy-logo.svg.png"> <meta property="og:image:width" content="1200"> <meta property="og:image:height" content="599"> <meta property="og:image" content="https://upload.wikimedia.org/wikipedia/commons/thumb/3/36/Groovy-logo.svg/800px-Groovy-logo.svg.png"> <meta property="og:image:width" content="800"> <meta property="og:image:height" content="399"> <meta property="og:image" content="https://upload.wikimedia.org/wikipedia/commons/thumb/3/36/Groovy-logo.svg/640px-Groovy-logo.svg.png"> <meta property="og:image:width" content="640"> <meta property="og:image:height" content="319"> <meta name="viewport" content="width=1120"> <meta property="og:title" content="Apache Groovy - Wikipedia"> <meta property="og:type" content="website"> <link rel="preconnect" href="//upload.wikimedia.org"> <link rel="alternate" media="only screen and (max-width: 640px)" href="//en.m.wikipedia.org/wiki/Apache_Groovy"> <link rel="alternate" type="application/x-wiki" title="Edit this page" href="/w/index.php?title=Apache_Groovy&action=edit"> <link rel="apple-touch-icon" href="/static/apple-touch/wikipedia.png"> <link rel="icon" href="/static/favicon/wikipedia.ico"> <link rel="search" type="application/opensearchdescription+xml" href="/w/rest.php/v1/search" title="Wikipedia (en)"> <link rel="EditURI" type="application/rsd+xml" href="//en.wikipedia.org/w/api.php?action=rsd"> <link rel="canonical" href="https://en.wikipedia.org/wiki/Apache_Groovy"> <link rel="license" href="https://creativecommons.org/licenses/by-sa/4.0/deed.en"> <link rel="alternate" type="application/atom+xml" title="Wikipedia Atom feed" href="/w/index.php?title=Special:RecentChanges&feed=atom"> <link rel="dns-prefetch" href="//meta.wikimedia.org" /> <link rel="dns-prefetch" href="//login.wikimedia.org"> </head> <body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject mw-editable page-Apache_Groovy rootpage-Apache_Groovy skin-vector-2022 action-view"><a class="mw-jump-link" href="#bodyContent">Jump to content</a> <div class="vector-header-container"> <header class="vector-header mw-header"> <div class="vector-header-start"> <nav class="vector-main-menu-landmark" aria-label="Site"> <div id="vector-main-menu-dropdown" class="vector-dropdown vector-main-menu-dropdown vector-button-flush-left vector-button-flush-right" > <input type="checkbox" id="vector-main-menu-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-main-menu-dropdown" class="vector-dropdown-checkbox " aria-label="Main menu" > <label id="vector-main-menu-dropdown-label" for="vector-main-menu-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-menu mw-ui-icon-wikimedia-menu"></span> <span class="vector-dropdown-label-text">Main menu</span> </label> <div class="vector-dropdown-content"> <div id="vector-main-menu-unpinned-container" class="vector-unpinned-container"> <div id="vector-main-menu" class="vector-main-menu vector-pinnable-element"> <div class="vector-pinnable-header vector-main-menu-pinnable-header vector-pinnable-header-unpinned" data-feature-name="main-menu-pinned" data-pinnable-element-id="vector-main-menu" data-pinned-container-id="vector-main-menu-pinned-container" data-unpinned-container-id="vector-main-menu-unpinned-container" > <div class="vector-pinnable-header-label">Main menu</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-main-menu.pin">move to sidebar</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-main-menu.unpin">hide</button> </div> <div id="p-navigation" class="vector-menu mw-portlet mw-portlet-navigation" > <div class="vector-menu-heading"> Navigation </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="n-mainpage-description" class="mw-list-item"><a href="/wiki/Main_Page" title="Visit the main page [z]" accesskey="z"><span>Main page</span></a></li><li id="n-contents" class="mw-list-item"><a href="/wiki/Wikipedia:Contents" title="Guides to browsing Wikipedia"><span>Contents</span></a></li><li id="n-currentevents" class="mw-list-item"><a href="/wiki/Portal:Current_events" title="Articles related to current events"><span>Current events</span></a></li><li id="n-randompage" class="mw-list-item"><a href="/wiki/Special:Random" title="Visit a randomly selected article [x]" accesskey="x"><span>Random article</span></a></li><li id="n-aboutsite" class="mw-list-item"><a href="/wiki/Wikipedia:About" title="Learn about Wikipedia and how it works"><span>About Wikipedia</span></a></li><li id="n-contactpage" class="mw-list-item"><a href="//en.wikipedia.org/wiki/Wikipedia:Contact_us" title="How to contact Wikipedia"><span>Contact us</span></a></li> </ul> </div> </div> <div id="p-interaction" class="vector-menu mw-portlet mw-portlet-interaction" > <div class="vector-menu-heading"> Contribute </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="n-help" class="mw-list-item"><a href="/wiki/Help:Contents" title="Guidance on how to use and edit Wikipedia"><span>Help</span></a></li><li id="n-introduction" class="mw-list-item"><a href="/wiki/Help:Introduction" title="Learn how to edit Wikipedia"><span>Learn to edit</span></a></li><li id="n-portal" class="mw-list-item"><a href="/wiki/Wikipedia:Community_portal" title="The hub for editors"><span>Community portal</span></a></li><li id="n-recentchanges" class="mw-list-item"><a href="/wiki/Special:RecentChanges" title="A list of recent changes to Wikipedia [r]" accesskey="r"><span>Recent changes</span></a></li><li id="n-upload" class="mw-list-item"><a href="/wiki/Wikipedia:File_upload_wizard" title="Add images or other media for use on Wikipedia"><span>Upload file</span></a></li> </ul> </div> </div> </div> </div> </div> </div> </nav> <a href="/wiki/Main_Page" class="mw-logo"> <img class="mw-logo-icon" src="/static/images/icons/wikipedia.png" alt="" aria-hidden="true" height="50" width="50"> <span class="mw-logo-container skin-invert"> <img class="mw-logo-wordmark" alt="Wikipedia" src="/static/images/mobile/copyright/wikipedia-wordmark-en.svg" style="width: 7.5em; height: 1.125em;"> <img class="mw-logo-tagline" alt="The Free Encyclopedia" src="/static/images/mobile/copyright/wikipedia-tagline-en.svg" width="117" height="13" style="width: 7.3125em; height: 0.8125em;"> </span> </a> </div> <div class="vector-header-end"> <div id="p-search" role="search" class="vector-search-box-vue vector-search-box-collapses vector-search-box-show-thumbnail vector-search-box-auto-expand-width vector-search-box"> <a href="/wiki/Special:Search" class="cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only search-toggle" title="Search Wikipedia [f]" accesskey="f"><span class="vector-icon mw-ui-icon-search mw-ui-icon-wikimedia-search"></span> <span>Search</span> </a> <div class="vector-typeahead-search-container"> <div class="cdx-typeahead-search cdx-typeahead-search--show-thumbnail cdx-typeahead-search--auto-expand-width"> <form action="/w/index.php" id="searchform" class="cdx-search-input cdx-search-input--has-end-button"> <div id="simpleSearch" class="cdx-search-input__input-wrapper" data-search-loc="header-moved"> <div class="cdx-text-input cdx-text-input--has-start-icon"> <input class="cdx-text-input__input" type="search" name="search" placeholder="Search Wikipedia" aria-label="Search Wikipedia" autocapitalize="sentences" title="Search Wikipedia [f]" accesskey="f" id="searchInput" > <span class="cdx-text-input__icon cdx-text-input__start-icon"></span> </div> <input type="hidden" name="title" value="Special:Search"> </div> <button class="cdx-button cdx-search-input__end-button">Search</button> </form> </div> </div> </div> <nav class="vector-user-links vector-user-links-wide" aria-label="Personal tools"> <div class="vector-user-links-main"> <div id="p-vector-user-menu-preferences" class="vector-menu mw-portlet emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> <div id="p-vector-user-menu-userpage" class="vector-menu mw-portlet emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> <nav class="vector-appearance-landmark" aria-label="Appearance"> <div id="vector-appearance-dropdown" class="vector-dropdown " title="Change the appearance of the page's font size, width, and color" > <input type="checkbox" id="vector-appearance-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-appearance-dropdown" class="vector-dropdown-checkbox " aria-label="Appearance" > <label id="vector-appearance-dropdown-label" for="vector-appearance-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-appearance mw-ui-icon-wikimedia-appearance"></span> <span class="vector-dropdown-label-text">Appearance</span> </label> <div class="vector-dropdown-content"> <div id="vector-appearance-unpinned-container" class="vector-unpinned-container"> </div> </div> </div> </nav> <div id="p-vector-user-menu-notifications" class="vector-menu mw-portlet emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> <div id="p-vector-user-menu-overflow" class="vector-menu mw-portlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="pt-sitesupport-2" class="user-links-collapsible-item mw-list-item user-links-collapsible-item"><a data-mw="interface" href="https://donate.wikimedia.org/wiki/Special:FundraiserRedirector?utm_source=donate&utm_medium=sidebar&utm_campaign=C13_en.wikipedia.org&uselang=en" class=""><span>Donate</span></a> </li> <li id="pt-createaccount-2" class="user-links-collapsible-item mw-list-item user-links-collapsible-item"><a data-mw="interface" href="/w/index.php?title=Special:CreateAccount&returnto=Apache+Groovy" title="You are encouraged to create an account and log in; however, it is not mandatory" class=""><span>Create account</span></a> </li> <li id="pt-login-2" class="user-links-collapsible-item mw-list-item user-links-collapsible-item"><a data-mw="interface" href="/w/index.php?title=Special:UserLogin&returnto=Apache+Groovy" title="You're encouraged to log in; however, it's not mandatory. [o]" accesskey="o" class=""><span>Log in</span></a> </li> </ul> </div> </div> </div> <div id="vector-user-links-dropdown" class="vector-dropdown vector-user-menu vector-button-flush-right vector-user-menu-logged-out" title="Log in and more options" > <input type="checkbox" id="vector-user-links-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-user-links-dropdown" class="vector-dropdown-checkbox " aria-label="Personal tools" > <label id="vector-user-links-dropdown-label" for="vector-user-links-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-ellipsis mw-ui-icon-wikimedia-ellipsis"></span> <span class="vector-dropdown-label-text">Personal tools</span> </label> <div class="vector-dropdown-content"> <div id="p-personal" class="vector-menu mw-portlet mw-portlet-personal user-links-collapsible-item" title="User menu" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="pt-sitesupport" class="user-links-collapsible-item mw-list-item"><a href="https://donate.wikimedia.org/wiki/Special:FundraiserRedirector?utm_source=donate&utm_medium=sidebar&utm_campaign=C13_en.wikipedia.org&uselang=en"><span>Donate</span></a></li><li id="pt-createaccount" class="user-links-collapsible-item mw-list-item"><a href="/w/index.php?title=Special:CreateAccount&returnto=Apache+Groovy" title="You are encouraged to create an account and log in; however, it is not mandatory"><span class="vector-icon mw-ui-icon-userAdd mw-ui-icon-wikimedia-userAdd"></span> <span>Create account</span></a></li><li id="pt-login" class="user-links-collapsible-item mw-list-item"><a href="/w/index.php?title=Special:UserLogin&returnto=Apache+Groovy" title="You're encouraged to log in; however, it's not mandatory. [o]" accesskey="o"><span class="vector-icon mw-ui-icon-logIn mw-ui-icon-wikimedia-logIn"></span> <span>Log in</span></a></li> </ul> </div> </div> <div id="p-user-menu-anon-editor" class="vector-menu mw-portlet mw-portlet-user-menu-anon-editor" > <div class="vector-menu-heading"> Pages for logged out editors <a href="/wiki/Help:Introduction" aria-label="Learn more about editing"><span>learn more</span></a> </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="pt-anoncontribs" class="mw-list-item"><a href="/wiki/Special:MyContributions" title="A list of edits made from this IP address [y]" accesskey="y"><span>Contributions</span></a></li><li id="pt-anontalk" class="mw-list-item"><a href="/wiki/Special:MyTalk" title="Discussion about edits from this IP address [n]" accesskey="n"><span>Talk</span></a></li> </ul> </div> </div> </div> </div> </nav> </div> </header> </div> <div class="mw-page-container"> <div class="mw-page-container-inner"> <div class="vector-sitenotice-container"> <div id="siteNotice"><!-- CentralNotice --></div> </div> <div class="vector-column-start"> <div class="vector-main-menu-container"> <div id="mw-navigation"> <nav id="mw-panel" class="vector-main-menu-landmark" aria-label="Site"> <div id="vector-main-menu-pinned-container" class="vector-pinned-container"> </div> </nav> </div> </div> <div class="vector-sticky-pinned-container"> <nav id="mw-panel-toc" aria-label="Contents" data-event-name="ui.sidebar-toc" class="mw-table-of-contents-container vector-toc-landmark"> <div id="vector-toc-pinned-container" class="vector-pinned-container"> <div id="vector-toc" class="vector-toc vector-pinnable-element"> <div class="vector-pinnable-header vector-toc-pinnable-header vector-pinnable-header-pinned" data-feature-name="toc-pinned" data-pinnable-element-id="vector-toc" > <h2 class="vector-pinnable-header-label">Contents</h2> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-toc.pin">move to sidebar</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-toc.unpin">hide</button> </div> <ul class="vector-toc-contents" id="mw-panel-toc-list"> <li id="toc-mw-content-text" class="vector-toc-list-item vector-toc-level-1"> <a href="#" class="vector-toc-link"> <div class="vector-toc-text">(Top)</div> </a> </li> <li id="toc-History" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#History"> <div class="vector-toc-text"> <span class="vector-toc-numb">1</span> <span>History</span> </div> </a> <ul id="toc-History-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Features" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Features"> <div class="vector-toc-text"> <span class="vector-toc-numb">2</span> <span>Features</span> </div> </a> <button aria-controls="toc-Features-sublist" class="cdx-button cdx-button--weight-quiet cdx-button--icon-only vector-toc-toggle"> <span class="vector-icon mw-ui-icon-wikimedia-expand"></span> <span>Toggle Features subsection</span> </button> <ul id="toc-Features-sublist" class="vector-toc-list"> <li id="toc-GroovyBeans,_properties" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#GroovyBeans,_properties"> <div class="vector-toc-text"> <span class="vector-toc-numb">2.1</span> <span>GroovyBeans, properties</span> </div> </a> <ul id="toc-GroovyBeans,_properties-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Prototype_extension" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Prototype_extension"> <div class="vector-toc-text"> <span class="vector-toc-numb">2.2</span> <span>Prototype extension</span> </div> </a> <ul id="toc-Prototype_extension-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Dot_and_parentheses" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Dot_and_parentheses"> <div class="vector-toc-text"> <span class="vector-toc-numb">2.3</span> <span>Dot and parentheses</span> </div> </a> <ul id="toc-Dot_and_parentheses-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Functional_programming" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Functional_programming"> <div class="vector-toc-text"> <span class="vector-toc-numb">2.4</span> <span>Functional programming</span> </div> </a> <ul id="toc-Functional_programming-sublist" class="vector-toc-list"> <li id="toc-Closures" class="vector-toc-list-item vector-toc-level-3"> <a class="vector-toc-link" href="#Closures"> <div class="vector-toc-text"> <span class="vector-toc-numb">2.4.1</span> <span>Closures</span> </div> </a> <ul id="toc-Closures-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Curry" class="vector-toc-list-item vector-toc-level-3"> <a class="vector-toc-link" href="#Curry"> <div class="vector-toc-text"> <span class="vector-toc-numb">2.4.2</span> <span>Curry</span> </div> </a> <ul id="toc-Curry-sublist" class="vector-toc-list"> </ul> </li> </ul> </li> <li id="toc-JSON_and_XML_processing" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#JSON_and_XML_processing"> <div class="vector-toc-text"> <span class="vector-toc-numb">2.5</span> <span>JSON and XML processing</span> </div> </a> <ul id="toc-JSON_and_XML_processing-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-String_interpolation" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#String_interpolation"> <div class="vector-toc-text"> <span class="vector-toc-numb">2.6</span> <span>String interpolation</span> </div> </a> <ul id="toc-String_interpolation-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Abstract_syntax_tree_transformation" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Abstract_syntax_tree_transformation"> <div class="vector-toc-text"> <span class="vector-toc-numb">2.7</span> <span>Abstract syntax tree transformation</span> </div> </a> <ul id="toc-Abstract_syntax_tree_transformation-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Traits" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Traits"> <div class="vector-toc-text"> <span class="vector-toc-numb">2.8</span> <span>Traits</span> </div> </a> <ul id="toc-Traits-sublist" class="vector-toc-list"> </ul> </li> </ul> </li> <li id="toc-Adoption" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Adoption"> <div class="vector-toc-text"> <span class="vector-toc-numb">3</span> <span>Adoption</span> </div> </a> <ul id="toc-Adoption-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-IDE_support" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#IDE_support"> <div class="vector-toc-text"> <span class="vector-toc-numb">4</span> <span>IDE support</span> </div> </a> <ul id="toc-IDE_support-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Dialects" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Dialects"> <div class="vector-toc-text"> <span class="vector-toc-numb">5</span> <span>Dialects</span> </div> </a> <ul id="toc-Dialects-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-See_also" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#See_also"> <div class="vector-toc-text"> <span class="vector-toc-numb">6</span> <span>See also</span> </div> </a> <ul id="toc-See_also-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-References" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#References"> <div class="vector-toc-text"> <span class="vector-toc-numb">7</span> <span>References</span> </div> </a> <button aria-controls="toc-References-sublist" class="cdx-button cdx-button--weight-quiet cdx-button--icon-only vector-toc-toggle"> <span class="vector-icon mw-ui-icon-wikimedia-expand"></span> <span>Toggle References subsection</span> </button> <ul id="toc-References-sublist" class="vector-toc-list"> <li id="toc-Citations" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Citations"> <div class="vector-toc-text"> <span class="vector-toc-numb">7.1</span> <span>Citations</span> </div> </a> <ul id="toc-Citations-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Sources" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Sources"> <div class="vector-toc-text"> <span class="vector-toc-numb">7.2</span> <span>Sources</span> </div> </a> <ul id="toc-Sources-sublist" class="vector-toc-list"> </ul> </li> </ul> </li> <li id="toc-External_links" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#External_links"> <div class="vector-toc-text"> <span class="vector-toc-numb">8</span> <span>External links</span> </div> </a> <ul id="toc-External_links-sublist" class="vector-toc-list"> </ul> </li> </ul> </div> </div> </nav> </div> </div> <div class="mw-content-container"> <main id="content" class="mw-body"> <header class="mw-body-header vector-page-titlebar"> <nav aria-label="Contents" class="vector-toc-landmark"> <div id="vector-page-titlebar-toc" class="vector-dropdown vector-page-titlebar-toc vector-button-flush-left" > <input type="checkbox" id="vector-page-titlebar-toc-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-page-titlebar-toc" class="vector-dropdown-checkbox " aria-label="Toggle the table of contents" > <label id="vector-page-titlebar-toc-label" for="vector-page-titlebar-toc-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-listBullet mw-ui-icon-wikimedia-listBullet"></span> <span class="vector-dropdown-label-text">Toggle the table of contents</span> </label> <div class="vector-dropdown-content"> <div id="vector-page-titlebar-toc-unpinned-container" class="vector-unpinned-container"> </div> </div> </div> </nav> <h1 id="firstHeading" class="firstHeading mw-first-heading"><span class="mw-page-title-main">Apache Groovy</span></h1> <div id="p-lang-btn" class="vector-dropdown mw-portlet mw-portlet-lang" > <input type="checkbox" id="p-lang-btn-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-p-lang-btn" class="vector-dropdown-checkbox mw-interlanguage-selector" aria-label="Go to an article in another language. Available in 30 languages" > <label id="p-lang-btn-label" for="p-lang-btn-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--action-progressive mw-portlet-lang-heading-30" aria-hidden="true" ><span class="vector-icon mw-ui-icon-language-progressive mw-ui-icon-wikimedia-language-progressive"></span> <span class="vector-dropdown-label-text">30 languages</span> </label> <div class="vector-dropdown-content"> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li class="interlanguage-link interwiki-ar mw-list-item"><a href="https://ar.wikipedia.org/wiki/%D8%A3%D8%A8%D8%A7%D8%AA%D8%B4%D9%8A_%D8%AC%D8%B1%D9%88%D9%81%D9%8A" title="أباتشي جروفي – Arabic" lang="ar" hreflang="ar" data-title="أباتشي جروفي" data-language-autonym="العربية" data-language-local-name="Arabic" class="interlanguage-link-target"><span>العربية</span></a></li><li class="interlanguage-link interwiki-bg mw-list-item"><a href="https://bg.wikipedia.org/wiki/Groovy_(%D0%B5%D0%B7%D0%B8%D0%BA_%D0%B7%D0%B0_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%B8%D1%80%D0%B0%D0%BD%D0%B5)" title="Groovy (език за програмиране) – Bulgarian" lang="bg" hreflang="bg" data-title="Groovy (език за програмиране)" data-language-autonym="Български" data-language-local-name="Bulgarian" class="interlanguage-link-target"><span>Български</span></a></li><li class="interlanguage-link interwiki-ca mw-list-item"><a href="https://ca.wikipedia.org/wiki/Groovy" title="Groovy – Catalan" lang="ca" hreflang="ca" data-title="Groovy" data-language-autonym="Català" data-language-local-name="Catalan" class="interlanguage-link-target"><span>Català</span></a></li><li class="interlanguage-link interwiki-cs mw-list-item"><a href="https://cs.wikipedia.org/wiki/Groovy" title="Groovy – Czech" lang="cs" hreflang="cs" data-title="Groovy" data-language-autonym="Čeština" data-language-local-name="Czech" class="interlanguage-link-target"><span>Čeština</span></a></li><li class="interlanguage-link interwiki-de mw-list-item"><a href="https://de.wikipedia.org/wiki/Groovy" title="Groovy – German" lang="de" hreflang="de" data-title="Groovy" data-language-autonym="Deutsch" data-language-local-name="German" class="interlanguage-link-target"><span>Deutsch</span></a></li><li class="interlanguage-link interwiki-es mw-list-item"><a href="https://es.wikipedia.org/wiki/Groovy_(lenguaje_de_programaci%C3%B3n)" title="Groovy (lenguaje de programación) – Spanish" lang="es" hreflang="es" data-title="Groovy (lenguaje de programación)" data-language-autonym="Español" data-language-local-name="Spanish" class="interlanguage-link-target"><span>Español</span></a></li><li class="interlanguage-link interwiki-fa mw-list-item"><a href="https://fa.wikipedia.org/wiki/%DA%AF%D8%B1%D9%88%D9%88%DB%8C_(%D8%B2%D8%A8%D8%A7%D9%86_%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87%E2%80%8C%D9%86%D9%88%DB%8C%D8%B3%DB%8C)" title="گرووی (زبان برنامهنویسی) – Persian" lang="fa" hreflang="fa" data-title="گرووی (زبان برنامهنویسی)" data-language-autonym="فارسی" data-language-local-name="Persian" class="interlanguage-link-target"><span>فارسی</span></a></li><li class="interlanguage-link interwiki-fr mw-list-item"><a href="https://fr.wikipedia.org/wiki/Groovy_(langage)" title="Groovy (langage) – French" lang="fr" hreflang="fr" data-title="Groovy (langage)" data-language-autonym="Français" data-language-local-name="French" class="interlanguage-link-target"><span>Français</span></a></li><li class="interlanguage-link interwiki-ko mw-list-item"><a href="https://ko.wikipedia.org/wiki/%EC%95%84%ED%8C%8C%EC%B9%98_%EA%B7%B8%EB%A3%A8%EB%B9%84" title="아파치 그루비 – Korean" lang="ko" hreflang="ko" data-title="아파치 그루비" data-language-autonym="한국어" data-language-local-name="Korean" class="interlanguage-link-target"><span>한국어</span></a></li><li class="interlanguage-link interwiki-it mw-list-item"><a href="https://it.wikipedia.org/wiki/Apache_Groovy" title="Apache Groovy – Italian" lang="it" hreflang="it" data-title="Apache Groovy" data-language-autonym="Italiano" data-language-local-name="Italian" class="interlanguage-link-target"><span>Italiano</span></a></li><li class="interlanguage-link interwiki-he mw-list-item"><a href="https://he.wikipedia.org/wiki/Groovy" title="Groovy – Hebrew" lang="he" hreflang="he" data-title="Groovy" data-language-autonym="עברית" data-language-local-name="Hebrew" class="interlanguage-link-target"><span>עברית</span></a></li><li class="interlanguage-link interwiki-ka mw-list-item"><a href="https://ka.wikipedia.org/wiki/%E1%83%92%E1%83%A0%E1%83%A3%E1%83%95%E1%83%98" title="გრუვი – Georgian" lang="ka" hreflang="ka" data-title="გრუვი" data-language-autonym="ქართული" data-language-local-name="Georgian" class="interlanguage-link-target"><span>ქართული</span></a></li><li class="interlanguage-link interwiki-hu mw-list-item"><a href="https://hu.wikipedia.org/wiki/Groovy" title="Groovy – Hungarian" lang="hu" hreflang="hu" data-title="Groovy" data-language-autonym="Magyar" data-language-local-name="Hungarian" class="interlanguage-link-target"><span>Magyar</span></a></li><li class="interlanguage-link interwiki-ml mw-list-item"><a href="https://ml.wikipedia.org/wiki/%E0%B4%85%E0%B4%AA%E0%B5%8D%E0%B4%AA%E0%B4%BE%E0%B4%9A%E0%B5%8D%E0%B4%9A%E0%B5%86_%E0%B4%97%E0%B5%8D%E0%B4%B0%E0%B5%82%E0%B4%B5%E0%B4%BF" title="അപ്പാച്ചെ ഗ്രൂവി – Malayalam" lang="ml" hreflang="ml" data-title="അപ്പാച്ചെ ഗ്രൂവി" data-language-autonym="മലയാളം" data-language-local-name="Malayalam" class="interlanguage-link-target"><span>മലയാളം</span></a></li><li class="interlanguage-link interwiki-nl mw-list-item"><a href="https://nl.wikipedia.org/wiki/Groovy" title="Groovy – Dutch" lang="nl" hreflang="nl" data-title="Groovy" data-language-autonym="Nederlands" data-language-local-name="Dutch" class="interlanguage-link-target"><span>Nederlands</span></a></li><li class="interlanguage-link interwiki-ja mw-list-item"><a href="https://ja.wikipedia.org/wiki/Groovy" title="Groovy – Japanese" lang="ja" hreflang="ja" data-title="Groovy" data-language-autonym="日本語" data-language-local-name="Japanese" class="interlanguage-link-target"><span>日本語</span></a></li><li class="interlanguage-link interwiki-pl mw-list-item"><a href="https://pl.wikipedia.org/wiki/Groovy" title="Groovy – Polish" lang="pl" hreflang="pl" data-title="Groovy" data-language-autonym="Polski" data-language-local-name="Polish" class="interlanguage-link-target"><span>Polski</span></a></li><li class="interlanguage-link interwiki-pt mw-list-item"><a href="https://pt.wikipedia.org/wiki/Groovy" title="Groovy – Portuguese" lang="pt" hreflang="pt" data-title="Groovy" data-language-autonym="Português" data-language-local-name="Portuguese" class="interlanguage-link-target"><span>Português</span></a></li><li class="interlanguage-link interwiki-ro mw-list-item"><a href="https://ro.wikipedia.org/wiki/Groovy" title="Groovy – Romanian" lang="ro" hreflang="ro" data-title="Groovy" data-language-autonym="Română" data-language-local-name="Romanian" class="interlanguage-link-target"><span>Română</span></a></li><li class="interlanguage-link interwiki-ru mw-list-item"><a href="https://ru.wikipedia.org/wiki/Groovy" title="Groovy – Russian" lang="ru" hreflang="ru" data-title="Groovy" data-language-autonym="Русский" data-language-local-name="Russian" class="interlanguage-link-target"><span>Русский</span></a></li><li class="interlanguage-link interwiki-sk mw-list-item"><a href="https://sk.wikipedia.org/wiki/Groovy" title="Groovy – Slovak" lang="sk" hreflang="sk" data-title="Groovy" data-language-autonym="Slovenčina" data-language-local-name="Slovak" class="interlanguage-link-target"><span>Slovenčina</span></a></li><li class="interlanguage-link interwiki-sr mw-list-item"><a href="https://sr.wikipedia.org/wiki/Apache_Groovy" title="Apache Groovy – Serbian" lang="sr" hreflang="sr" data-title="Apache Groovy" data-language-autonym="Српски / srpski" data-language-local-name="Serbian" class="interlanguage-link-target"><span>Српски / srpski</span></a></li><li class="interlanguage-link interwiki-sv mw-list-item"><a href="https://sv.wikipedia.org/wiki/Groovy_(programspr%C3%A5k)" title="Groovy (programspråk) – Swedish" lang="sv" hreflang="sv" data-title="Groovy (programspråk)" data-language-autonym="Svenska" data-language-local-name="Swedish" class="interlanguage-link-target"><span>Svenska</span></a></li><li class="interlanguage-link interwiki-th mw-list-item"><a href="https://th.wikipedia.org/wiki/%E0%B8%A0%E0%B8%B2%E0%B8%A9%E0%B8%B2%E0%B8%81%E0%B8%A3%E0%B8%B9%E0%B8%A7%E0%B8%B5" title="ภาษากรูวี – Thai" lang="th" hreflang="th" data-title="ภาษากรูวี" data-language-autonym="ไทย" data-language-local-name="Thai" class="interlanguage-link-target"><span>ไทย</span></a></li><li class="interlanguage-link interwiki-tg mw-list-item"><a href="https://tg.wikipedia.org/wiki/Groovy" title="Groovy – Tajik" lang="tg" hreflang="tg" data-title="Groovy" data-language-autonym="Тоҷикӣ" data-language-local-name="Tajik" class="interlanguage-link-target"><span>Тоҷикӣ</span></a></li><li class="interlanguage-link interwiki-tr mw-list-item"><a href="https://tr.wikipedia.org/wiki/Groovy" title="Groovy – Turkish" lang="tr" hreflang="tr" data-title="Groovy" data-language-autonym="Türkçe" data-language-local-name="Turkish" class="interlanguage-link-target"><span>Türkçe</span></a></li><li class="interlanguage-link interwiki-uk mw-list-item"><a href="https://uk.wikipedia.org/wiki/Groovy" title="Groovy – Ukrainian" lang="uk" hreflang="uk" data-title="Groovy" data-language-autonym="Українська" data-language-local-name="Ukrainian" class="interlanguage-link-target"><span>Українська</span></a></li><li class="interlanguage-link interwiki-vi mw-list-item"><a href="https://vi.wikipedia.org/wiki/Groovy_(ng%C3%B4n_ng%E1%BB%AF_l%E1%BA%ADp_tr%C3%ACnh)" title="Groovy (ngôn ngữ lập trình) – Vietnamese" lang="vi" hreflang="vi" data-title="Groovy (ngôn ngữ lập trình)" data-language-autonym="Tiếng Việt" data-language-local-name="Vietnamese" class="interlanguage-link-target"><span>Tiếng Việt</span></a></li><li class="interlanguage-link interwiki-zh-yue mw-list-item"><a href="https://zh-yue.wikipedia.org/wiki/Groovy" title="Groovy – Cantonese" lang="yue" hreflang="yue" data-title="Groovy" data-language-autonym="粵語" data-language-local-name="Cantonese" class="interlanguage-link-target"><span>粵語</span></a></li><li class="interlanguage-link interwiki-zh mw-list-item"><a href="https://zh.wikipedia.org/wiki/Groovy" title="Groovy – Chinese" lang="zh" hreflang="zh" data-title="Groovy" data-language-autonym="中文" data-language-local-name="Chinese" class="interlanguage-link-target"><span>中文</span></a></li> </ul> <div class="after-portlet after-portlet-lang"><span class="wb-langlinks-edit wb-langlinks-link"><a href="https://www.wikidata.org/wiki/Special:EntityPage/Q504453#sitelinks-wikipedia" title="Edit interlanguage links" class="wbc-editpage">Edit links</a></span></div> </div> </div> </div> </header> <div class="vector-page-toolbar"> <div class="vector-page-toolbar-container"> <div id="left-navigation"> <nav aria-label="Namespaces"> <div id="p-associated-pages" class="vector-menu vector-menu-tabs mw-portlet mw-portlet-associated-pages" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="ca-nstab-main" class="selected vector-tab-noicon mw-list-item"><a href="/wiki/Apache_Groovy" title="View the content page [c]" accesskey="c"><span>Article</span></a></li><li id="ca-talk" class="vector-tab-noicon mw-list-item"><a href="/wiki/Talk:Apache_Groovy" rel="discussion" title="Discuss improvements to the content page [t]" accesskey="t"><span>Talk</span></a></li> </ul> </div> </div> <div id="vector-variants-dropdown" class="vector-dropdown emptyPortlet" > <input type="checkbox" id="vector-variants-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-variants-dropdown" class="vector-dropdown-checkbox " aria-label="Change language variant" > <label id="vector-variants-dropdown-label" for="vector-variants-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet" aria-hidden="true" ><span class="vector-dropdown-label-text">English</span> </label> <div class="vector-dropdown-content"> <div id="p-variants" class="vector-menu mw-portlet mw-portlet-variants emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> </div> </div> </nav> </div> <div id="right-navigation" class="vector-collapsible"> <nav aria-label="Views"> <div id="p-views" class="vector-menu vector-menu-tabs mw-portlet mw-portlet-views" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="ca-view" class="selected vector-tab-noicon mw-list-item"><a href="/wiki/Apache_Groovy"><span>Read</span></a></li><li id="ca-edit" class="vector-tab-noicon mw-list-item"><a href="/w/index.php?title=Apache_Groovy&action=edit" title="Edit this page [e]" accesskey="e"><span>Edit</span></a></li><li id="ca-history" class="vector-tab-noicon mw-list-item"><a href="/w/index.php?title=Apache_Groovy&action=history" title="Past revisions of this page [h]" accesskey="h"><span>View history</span></a></li> </ul> </div> </div> </nav> <nav class="vector-page-tools-landmark" aria-label="Page tools"> <div id="vector-page-tools-dropdown" class="vector-dropdown vector-page-tools-dropdown" > <input type="checkbox" id="vector-page-tools-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-page-tools-dropdown" class="vector-dropdown-checkbox " aria-label="Tools" > <label id="vector-page-tools-dropdown-label" for="vector-page-tools-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet" aria-hidden="true" ><span class="vector-dropdown-label-text">Tools</span> </label> <div class="vector-dropdown-content"> <div id="vector-page-tools-unpinned-container" class="vector-unpinned-container"> <div id="vector-page-tools" class="vector-page-tools vector-pinnable-element"> <div class="vector-pinnable-header vector-page-tools-pinnable-header vector-pinnable-header-unpinned" data-feature-name="page-tools-pinned" data-pinnable-element-id="vector-page-tools" data-pinned-container-id="vector-page-tools-pinned-container" data-unpinned-container-id="vector-page-tools-unpinned-container" > <div class="vector-pinnable-header-label">Tools</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-page-tools.pin">move to sidebar</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-page-tools.unpin">hide</button> </div> <div id="p-cactions" class="vector-menu mw-portlet mw-portlet-cactions emptyPortlet vector-has-collapsible-items" title="More options" > <div class="vector-menu-heading"> Actions </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="ca-more-view" class="selected vector-more-collapsible-item mw-list-item"><a href="/wiki/Apache_Groovy"><span>Read</span></a></li><li id="ca-more-edit" class="vector-more-collapsible-item mw-list-item"><a href="/w/index.php?title=Apache_Groovy&action=edit" title="Edit this page [e]" accesskey="e"><span>Edit</span></a></li><li id="ca-more-history" class="vector-more-collapsible-item mw-list-item"><a href="/w/index.php?title=Apache_Groovy&action=history"><span>View history</span></a></li> </ul> </div> </div> <div id="p-tb" class="vector-menu mw-portlet mw-portlet-tb" > <div class="vector-menu-heading"> General </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="t-whatlinkshere" class="mw-list-item"><a href="/wiki/Special:WhatLinksHere/Apache_Groovy" title="List of all English Wikipedia pages containing links to this page [j]" accesskey="j"><span>What links here</span></a></li><li id="t-recentchangeslinked" class="mw-list-item"><a href="/wiki/Special:RecentChangesLinked/Apache_Groovy" rel="nofollow" title="Recent changes in pages linked from this page [k]" accesskey="k"><span>Related changes</span></a></li><li id="t-upload" class="mw-list-item"><a href="/wiki/Wikipedia:File_Upload_Wizard" title="Upload files [u]" accesskey="u"><span>Upload file</span></a></li><li id="t-specialpages" class="mw-list-item"><a href="/wiki/Special:SpecialPages" title="A list of all special pages [q]" accesskey="q"><span>Special pages</span></a></li><li id="t-permalink" class="mw-list-item"><a href="/w/index.php?title=Apache_Groovy&oldid=1251972389" title="Permanent link to this revision of this page"><span>Permanent link</span></a></li><li id="t-info" class="mw-list-item"><a href="/w/index.php?title=Apache_Groovy&action=info" title="More information about this page"><span>Page information</span></a></li><li id="t-cite" class="mw-list-item"><a href="/w/index.php?title=Special:CiteThisPage&page=Apache_Groovy&id=1251972389&wpFormIdentifier=titleform" title="Information on how to cite this page"><span>Cite this page</span></a></li><li id="t-urlshortener" class="mw-list-item"><a href="/w/index.php?title=Special:UrlShortener&url=https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FApache_Groovy"><span>Get shortened URL</span></a></li><li id="t-urlshortener-qrcode" class="mw-list-item"><a href="/w/index.php?title=Special:QrCode&url=https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FApache_Groovy"><span>Download QR code</span></a></li> </ul> </div> </div> <div id="p-coll-print_export" class="vector-menu mw-portlet mw-portlet-coll-print_export" > <div class="vector-menu-heading"> Print/export </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="coll-download-as-rl" class="mw-list-item"><a href="/w/index.php?title=Special:DownloadAsPdf&page=Apache_Groovy&action=show-download-screen" title="Download this page as a PDF file"><span>Download as PDF</span></a></li><li id="t-print" class="mw-list-item"><a href="/w/index.php?title=Apache_Groovy&printable=yes" title="Printable version of this page [p]" accesskey="p"><span>Printable version</span></a></li> </ul> </div> </div> <div id="p-wikibase-otherprojects" class="vector-menu mw-portlet mw-portlet-wikibase-otherprojects" > <div class="vector-menu-heading"> In other projects </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li class="wb-otherproject-link wb-otherproject-commons mw-list-item"><a href="https://commons.wikimedia.org/wiki/Category:Groovy" hreflang="en"><span>Wikimedia Commons</span></a></li><li id="t-wikibase" class="wb-otherproject-link wb-otherproject-wikibase-dataitem mw-list-item"><a href="https://www.wikidata.org/wiki/Special:EntityPage/Q504453" title="Structured data on this page hosted by Wikidata [g]" accesskey="g"><span>Wikidata item</span></a></li> </ul> </div> </div> </div> </div> </div> </div> </nav> </div> </div> </div> <div class="vector-column-end"> <div class="vector-sticky-pinned-container"> <nav class="vector-page-tools-landmark" aria-label="Page tools"> <div id="vector-page-tools-pinned-container" class="vector-pinned-container"> </div> </nav> <nav class="vector-appearance-landmark" aria-label="Appearance"> <div id="vector-appearance-pinned-container" class="vector-pinned-container"> <div id="vector-appearance" class="vector-appearance vector-pinnable-element"> <div class="vector-pinnable-header vector-appearance-pinnable-header vector-pinnable-header-pinned" data-feature-name="appearance-pinned" data-pinnable-element-id="vector-appearance" data-pinned-container-id="vector-appearance-pinned-container" data-unpinned-container-id="vector-appearance-unpinned-container" > <div class="vector-pinnable-header-label">Appearance</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-appearance.pin">move to sidebar</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-appearance.unpin">hide</button> </div> </div> </div> </nav> </div> </div> <div id="bodyContent" class="vector-body" aria-labelledby="firstHeading" data-mw-ve-target-container> <div class="vector-body-before-content"> <div class="mw-indicators"> </div> <div id="siteSub" class="noprint">From Wikipedia, the free encyclopedia</div> </div> <div id="contentSub"><div id="mw-content-subtitle"></div></div> <div id="mw-content-text" class="mw-body-content"><div class="mw-content-ltr mw-parser-output" lang="en" dir="ltr"><div class="shortdescription nomobile noexcerpt noprint searchaux" style="display:none">Programming language</div> <style data-mw-deduplicate="TemplateStyles:r1257001546">.mw-parser-output .infobox-subbox{padding:0;border:none;margin:-3px;width:auto;min-width:100%;font-size:100%;clear:none;float:none;background-color:transparent}.mw-parser-output .infobox-3cols-child{margin:auto}.mw-parser-output .infobox .navbar{font-size:100%}@media screen{html.skin-theme-clientpref-night .mw-parser-output .infobox-full-data:not(.notheme)>div:not(.notheme)[style]{background:#1f1f23!important;color:#f8f9fa}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .infobox-full-data:not(.notheme) div:not(.notheme){background:#1f1f23!important;color:#f8f9fa}}@media(min-width:640px){body.skin--responsive .mw-parser-output .infobox-table{display:table!important}body.skin--responsive .mw-parser-output .infobox-table>caption{display:table-caption!important}body.skin--responsive .mw-parser-output .infobox-table>tbody{display:table-row-group}body.skin--responsive .mw-parser-output .infobox-table tr{display:table-row!important}body.skin--responsive .mw-parser-output .infobox-table th,body.skin--responsive .mw-parser-output .infobox-table td{padding-left:inherit;padding-right:inherit}}</style><table class="infobox vevent"><caption class="infobox-title summary">Groovy</caption><tbody><tr><td colspan="2" class="infobox-image"><span typeof="mw:File"><a href="/wiki/File:Groovy-logo.svg" class="mw-file-description"><img src="//upload.wikimedia.org/wikipedia/commons/thumb/3/36/Groovy-logo.svg/121px-Groovy-logo.svg.png" decoding="async" width="121" height="60" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/3/36/Groovy-logo.svg/182px-Groovy-logo.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/3/36/Groovy-logo.svg/242px-Groovy-logo.svg.png 2x" data-file-width="445" data-file-height="222" /></a></span><div class="infobox-caption">Groovy Logo</div></td></tr><tr><th scope="row" class="infobox-label"><a href="/wiki/Programming_paradigm" title="Programming paradigm">Paradigm</a></th><td class="infobox-data"><a href="/wiki/Programming_paradigm#Multi-paradigm" title="Programming paradigm">Multi-paradigm</a>: <a href="/wiki/Object-oriented_programming" title="Object-oriented programming">object-oriented</a>, <a href="/wiki/Imperative_programming" title="Imperative programming">imperative</a>, <a href="/wiki/Functional_programming" title="Functional programming">functional</a>, <a href="/wiki/Aspect-oriented_programming" title="Aspect-oriented programming">aspect-oriented</a>, <a href="/wiki/Scripting_language" title="Scripting language">scripting</a></td></tr><tr><th scope="row" class="infobox-label"><a href="/wiki/Software_design" title="Software design">Designed by</a></th><td class="infobox-data"><a href="/wiki/James_Strachan_(programmer)" class="mw-redirect" title="James Strachan (programmer)">James Strachan</a></td></tr><tr><th scope="row" class="infobox-label"><a href="/wiki/Software_developer" class="mw-redirect" title="Software developer">Developer</a></th><td class="infobox-data organiser">Guillaume Laforge (PMC Chair)<br />Jochen Theodorou (Tech Lead)<br />Paul King<br />Cedric Champeau</td></tr><tr><th scope="row" class="infobox-label">First appeared</th><td class="infobox-data">2003<span class="noprint">; 21 years ago</span><span style="display:none"> (<span class="bday dtstart published updated">2003</span>)</span></td></tr><tr><td colspan="2" class="infobox-full-data"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1257001546"></td></tr><tr><th scope="row" class="infobox-label" style="white-space: nowrap;"><a href="/wiki/Software_release_life_cycle" title="Software release life cycle">Stable release</a></th><td class="infobox-data">4.0.24<sup id="cite_ref-wikidata-16cfa588007f1a320e55f390976ca730bbfafbe3-v18_1-0" class="reference"><a href="#cite_note-wikidata-16cfa588007f1a320e55f390976ca730bbfafbe3-v18-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup> <span class="mw-valign-text-top" typeof="mw:File/Frameless"><a href="https://www.wikidata.org/wiki/Q504453?uselang=en#P348" title="Edit this on Wikidata"><img alt="Edit this on Wikidata" src="//upload.wikimedia.org/wikipedia/en/thumb/8/8a/OOjs_UI_icon_edit-ltr-progressive.svg/10px-OOjs_UI_icon_edit-ltr-progressive.svg.png" decoding="async" width="10" height="10" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/en/thumb/8/8a/OOjs_UI_icon_edit-ltr-progressive.svg/15px-OOjs_UI_icon_edit-ltr-progressive.svg.png 1.5x, //upload.wikimedia.org/wikipedia/en/thumb/8/8a/OOjs_UI_icon_edit-ltr-progressive.svg/20px-OOjs_UI_icon_edit-ltr-progressive.svg.png 2x" data-file-width="20" data-file-height="20" /></a></span> (5 November 2024<span class="noprint">; 18 days ago</span><span style="display:none"> (<span class="bday dtstart published updated">5 November 2024</span>)</span>) <span class="plainlinks"><a class="external text" href="https://en.wikipedia.org/w/index.php?title=Template:Latest_stable_software_release/Groovy&action=edit">[±]</a></span></td></tr><tr><th scope="row" class="infobox-label" style="white-space: nowrap;"><a href="/wiki/Software_release_life_cycle#Beta" title="Software release life cycle">Preview release</a></th><td class="infobox-data"><div style="margin:0px;">4.0.0-beta-1 / September 6, 2021<span class="noprint">; 3 years ago</span><span style="display:none"> (<span class="bday dtstart published updated">2021-09-06</span>)</span><sup id="cite_ref-github-releases_2-0" class="reference"><a href="#cite_note-github-releases-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup></div></td></tr><tr style="display:none"><td colspan="2"> </td></tr><tr><th scope="row" class="infobox-label"><a href="/wiki/Type_system" title="Type system">Typing discipline</a></th><td class="infobox-data"><a href="/wiki/Type_system#DYNAMIC" title="Type system">Dynamic</a>, <a href="/wiki/Type_system#STATIC" title="Type system">static</a>, <a href="/wiki/Strong_and_weak_typing" title="Strong and weak typing">strong</a>, <a href="/wiki/Duck_typing" title="Duck typing">duck</a></td></tr><tr><th scope="row" class="infobox-label"><a href="/wiki/Computing_platform" title="Computing platform">Platform</a></th><td class="infobox-data"><a href="/wiki/Java_Platform,_Standard_Edition" title="Java Platform, Standard Edition">Java SE</a></td></tr><tr><th scope="row" class="infobox-label"><a href="/wiki/Software_license" title="Software license">License</a></th><td class="infobox-data"><a href="/wiki/Apache_License_2.0" class="mw-redirect" title="Apache License 2.0">Apache License 2.0</a></td></tr><tr><th scope="row" class="infobox-label"><a href="/wiki/Filename_extension" title="Filename extension">Filename extensions</a></th><td class="infobox-data"><code>.groovy, .gvy, .gy, .gsh</code><sup id="cite_ref-Groovy_Goodness:_Default_Groovy_Script_File_Extensions_3-0" class="reference"><a href="#cite_note-Groovy_Goodness:_Default_Groovy_Script_File_Extensions-3"><span class="cite-bracket">[</span>3<span class="cite-bracket">]</span></a></sup></td></tr><tr><th scope="row" class="infobox-label">Website</th><td class="infobox-data"><span class="url"><a rel="nofollow" class="external text" href="https://groovy-lang.org">groovy-lang<wbr />.org</a></span> <span class="mw-valign-text-top noprint" typeof="mw:File/Frameless"><a href="https://www.wikidata.org/wiki/Q504453#P856" title="Edit this at Wikidata"><img alt="Edit this at Wikidata" src="//upload.wikimedia.org/wikipedia/en/thumb/8/8a/OOjs_UI_icon_edit-ltr-progressive.svg/10px-OOjs_UI_icon_edit-ltr-progressive.svg.png" decoding="async" width="10" height="10" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/en/thumb/8/8a/OOjs_UI_icon_edit-ltr-progressive.svg/15px-OOjs_UI_icon_edit-ltr-progressive.svg.png 1.5x, //upload.wikimedia.org/wikipedia/en/thumb/8/8a/OOjs_UI_icon_edit-ltr-progressive.svg/20px-OOjs_UI_icon_edit-ltr-progressive.svg.png 2x" data-file-width="20" data-file-height="20" /></a></span></td></tr><tr><th colspan="2" class="infobox-header" style="background-color: #eee;">Major <a href="/wiki/Programming_language_implementation" title="Programming language implementation">implementations</a></th></tr><tr><td colspan="2" class="infobox-full-data"><a href="/wiki/Gradle" title="Gradle">Gradle</a>, <a href="/wiki/Grails_(framework)" title="Grails (framework)">Grails</a></td></tr><tr><th colspan="2" class="infobox-header" style="background-color: #eee;">Influenced by</th></tr><tr><td colspan="2" class="infobox-full-data"><a href="/wiki/Java_(programming_language)" title="Java (programming language)">Java</a>, <a href="/wiki/Python_(programming_language)" title="Python (programming language)">Python</a>, <a href="/wiki/Ruby_(programming_language)" title="Ruby (programming language)">Ruby</a>, <a href="/wiki/Smalltalk" title="Smalltalk">Smalltalk</a></td></tr><tr><th colspan="2" class="infobox-header" style="background-color: #eee;">Influenced</th></tr><tr><td colspan="2" class="infobox-full-data"><a href="/wiki/Kotlin_(programming_language)" title="Kotlin (programming language)">Kotlin</a></td></tr></tbody></table> <p><b>Apache Groovy</b> is a <a href="/wiki/Java_(programming_language)" title="Java (programming language)">Java</a>-syntax-compatible <a href="/wiki/Object-oriented_programming" title="Object-oriented programming">object-oriented</a> <a href="/wiki/Programming_language" title="Programming language">programming language</a> for the <a href="/wiki/Java_(software_platform)" title="Java (software platform)">Java platform</a>. It is both a static and <a href="/wiki/Dynamic_programming_language" title="Dynamic programming language">dynamic</a> language with features similar to those of <a href="/wiki/Python_(programming_language)" title="Python (programming language)">Python</a>, <a href="/wiki/Ruby_(programming_language)" title="Ruby (programming language)">Ruby</a>, and <a href="/wiki/Smalltalk" title="Smalltalk">Smalltalk</a>. It can be used as both a <a href="/wiki/Programming_language" title="Programming language">programming language</a> and a <a href="/wiki/Scripting_language" title="Scripting language">scripting language</a> for the Java Platform, is compiled to <a href="/wiki/Java_virtual_machine" title="Java virtual machine">Java virtual machine</a> (JVM) <a href="/wiki/Bytecode" title="Bytecode">bytecode</a>, and interoperates seamlessly with other Java code and <a href="/wiki/Library_(computing)" title="Library (computing)">libraries</a>. Groovy uses a <a href="/wiki/Curly_bracket_languages" class="mw-redirect" title="Curly bracket languages">curly-bracket syntax</a> similar to Java's. Groovy supports <a href="/wiki/Closure_(computer_programming)" title="Closure (computer programming)">closures</a>, multiline strings, and <a href="/wiki/String_interpolation" title="String interpolation">expressions embedded in strings</a>. Much of Groovy's power lies in its <a href="/wiki/Abstract_syntax_tree" title="Abstract syntax tree">AST</a> transformations, triggered through annotations. </p><p>Groovy 1.0 was released on January 2, 2007, and Groovy 2.0 in July, 2012. Since version 2, Groovy can be <a href="/wiki/Type_system#STATIC" title="Type system">compiled statically</a>, offering <a href="/wiki/Type_inference" title="Type inference">type inference</a> and performance near that of Java.<sup id="cite_ref-4" class="reference"><a href="#cite_note-4"><span class="cite-bracket">[</span>4<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-5" class="reference"><a href="#cite_note-5"><span class="cite-bracket">[</span>5<span class="cite-bracket">]</span></a></sup> Groovy 2.4 was the last major release under <a href="/wiki/Pivotal_Software" title="Pivotal Software">Pivotal Software</a>'s sponsorship which ended in March 2015.<sup id="cite_ref-blog.pivotal.io_6-0" class="reference"><a href="#cite_note-blog.pivotal.io-6"><span class="cite-bracket">[</span>6<span class="cite-bracket">]</span></a></sup> Groovy has since changed its governance structure to a Project Management Committee in <a href="/wiki/The_Apache_Software_Foundation" title="The Apache Software Foundation">the Apache Software Foundation</a>.<sup id="cite_ref-Groovy_Incubator_7-0" class="reference"><a href="#cite_note-Groovy_Incubator-7"><span class="cite-bracket">[</span>7<span class="cite-bracket">]</span></a></sup> </p> <meta property="mw:PageProp/toc" /> <div class="mw-heading mw-heading2"><h2 id="History">History</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Apache_Groovy&action=edit&section=1" title="Edit section: History"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p><a href="/wiki/James_Strachan_(programmer)" class="mw-redirect" title="James Strachan (programmer)">James Strachan</a> first talked about the development of Groovy on his blog in August 2003.<sup id="cite_ref-8" class="reference"><a href="#cite_note-8"><span class="cite-bracket">[</span>8<span class="cite-bracket">]</span></a></sup> In March 2004, Groovy was submitted to the JCP as JSR 241<sup id="cite_ref-JSR_9-0" class="reference"><a href="#cite_note-JSR-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup> and accepted by ballot. Several versions were released between 2004 and 2006. After the <a href="/wiki/Java_Community_Process" title="Java Community Process">Java Community Process</a> (JCP) standardization effort began, the version numbering changed, and a version called "1.0" was released on January 2, 2007. After various betas and release candidates numbered 1.1, on December 7, 2007, Groovy 1.1 Final was released and immediately renumbered as Groovy 1.5 to reflect the many changes made. </p><p>In 2007, Groovy won the first prize at JAX 2007 innovation award.<sup id="cite_ref-10" class="reference"><a href="#cite_note-10"><span class="cite-bracket">[</span>10<span class="cite-bracket">]</span></a></sup> In 2008, <a href="/wiki/Grails_(framework)" title="Grails (framework)">Grails</a>, a Groovy <a href="/wiki/Web_framework" title="Web framework">web framework</a>, won the second prize at JAX 2008 innovation award.<sup id="cite_ref-11" class="reference"><a href="#cite_note-11"><span class="cite-bracket">[</span>11<span class="cite-bracket">]</span></a></sup> </p><p>In November 2008, <a href="/wiki/SpringSource" class="mw-redirect" title="SpringSource">SpringSource</a> acquired the Groovy and Grails company (G2One).<sup id="cite_ref-12" class="reference"><a href="#cite_note-12"><span class="cite-bracket">[</span>12<span class="cite-bracket">]</span></a></sup> In August 2009 <a href="/wiki/VMware" title="VMware">VMware</a> acquired SpringSource.<sup id="cite_ref-13" class="reference"><a href="#cite_note-13"><span class="cite-bracket">[</span>13<span class="cite-bracket">]</span></a></sup> </p><p>In April 2012, after eight years of inactivity, the Spec Lead changed the status of JSR 241 to dormant.<sup id="cite_ref-JSR_9-1" class="reference"><a href="#cite_note-JSR-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup> </p><p>Strachan had left the project silently a year before the Groovy 1.0 release in 2007.<sup class="noprint Inline-Template Template-Fact" style="white-space:nowrap;">[<i><a href="/wiki/Wikipedia:Citation_needed" title="Wikipedia:Citation needed"><span title="This claim needs references to reliable sources. (May 2012)">citation needed</span></a></i>]</sup> In Oct 2016, Strachan stated "I still love groovy (jenkins pipelines are so groovy!), java, go, typescript and kotlin".<sup id="cite_ref-14" class="reference"><a href="#cite_note-14"><span class="cite-bracket">[</span>14<span class="cite-bracket">]</span></a></sup> </p><p>On July 2, 2012, Groovy 2.0 was released, which, among other new features, added static compiling and <a href="/wiki/Static_type_checking" class="mw-redirect" title="Static type checking">static type checking</a>. </p><p>When the <a href="/wiki/Pivotal_Software" title="Pivotal Software">Pivotal Software</a> joint venture was spun-off by <a href="/wiki/EMC_Corporation" class="mw-redirect" title="EMC Corporation">EMC Corporation</a> (EMC) and VMware in April 2013, Groovy and Grails formed part of its product portfolio. Pivotal ceased sponsoring Groovy and Grails from April 2015.<sup id="cite_ref-blog.pivotal.io_6-1" class="reference"><a href="#cite_note-blog.pivotal.io-6"><span class="cite-bracket">[</span>6<span class="cite-bracket">]</span></a></sup> That same month, Groovy changed its governance structure from a Codehaus repository to a Project Management Committee (PMC) in the <a href="/wiki/Apache_Software_Foundation" class="mw-redirect" title="Apache Software Foundation">Apache Software Foundation</a> via its incubator.<sup id="cite_ref-Groovy_Incubator_7-1" class="reference"><a href="#cite_note-Groovy_Incubator-7"><span class="cite-bracket">[</span>7<span class="cite-bracket">]</span></a></sup> Groovy graduated from Apache's incubator and became a top-level project in November 2015.<sup id="cite_ref-15" class="reference"><a href="#cite_note-15"><span class="cite-bracket">[</span>15<span class="cite-bracket">]</span></a></sup> </p><p>On February 7, 2020, Groovy 3.0 was released.<sup id="cite_ref-16" class="reference"><a href="#cite_note-16"><span class="cite-bracket">[</span>16<span class="cite-bracket">]</span></a></sup> Version 4.0 was released on January 25, 2022.<sup id="cite_ref-17" class="reference"><a href="#cite_note-17"><span class="cite-bracket">[</span>17<span class="cite-bracket">]</span></a></sup> </p> <div class="mw-heading mw-heading2"><h2 id="Features">Features</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Apache_Groovy&action=edit&section=2" title="Edit section: Features"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Most valid Java files are also valid Groovy files. Although the two languages are similar, Groovy code can be more compact, because it does not need all the elements that Java needs.<sup id="cite_ref-konig32_18-0" class="reference"><a href="#cite_note-konig32-18"><span class="cite-bracket">[</span>18<span class="cite-bracket">]</span></a></sup> This makes it possible for Java programmers to learn Groovy gradually by starting with familiar Java syntax before acquiring more Groovy <a href="/wiki/Programming_idiom" title="Programming idiom">programming idioms</a>.<sup id="cite_ref-19" class="reference"><a href="#cite_note-19"><span class="cite-bracket">[</span>19<span class="cite-bracket">]</span></a></sup> </p><p>Groovy features not available in Java include both static and <a href="/wiki/Type_system#DYNAMIC" title="Type system">dynamic</a> typing (with the keyword <code>def</code>), <a href="/wiki/Operator_overloading" title="Operator overloading">operator overloading</a>, native syntax for lists and <a href="/wiki/Associative_array" title="Associative array">associative arrays</a> (maps), native support for <a href="/wiki/Regular_expression" title="Regular expression">regular expressions</a>, polymorphic iteration, <a href="/wiki/String_interpolation" title="String interpolation">string interpolation</a>, added helper methods, and the <a href="/wiki/Safe_navigation_operator" title="Safe navigation operator">safe navigation operator</a> <code>?.</code> to check automatically for <a href="/wiki/Null_pointer" title="Null pointer">null pointers</a> (for example, <code>variable?.method()</code>, or <code>variable?.field</code>).<sup id="cite_ref-20" class="reference"><a href="#cite_note-20"><span class="cite-bracket">[</span>20<span class="cite-bracket">]</span></a></sup> </p><p>Since version 2 Groovy also supports modularity (being able to ship only the needed jars according to the project needs, thus reducing the size of Groovy's library), type checking, static compiling, Project Coin syntax enhancements, <a href="/wiki/Java_syntax#Code_blocks" title="Java syntax">multicatch blocks</a> and ongoing performance enhancements using the <code>invokedynamic</code> instruction introduced in <a href="/wiki/Java_version_history#Java_SE_7" title="Java version history">Java 7</a>.<sup id="cite_ref-21" class="reference"><a href="#cite_note-21"><span class="cite-bracket">[</span>21<span class="cite-bracket">]</span></a></sup> </p><p>Groovy provides native support for various <a href="/wiki/Markup_language" title="Markup language">markup languages</a> such as <a href="/wiki/XML" title="XML">XML</a> and <a href="/wiki/HTML" title="HTML">HTML</a>, accomplished via an inline <a href="/wiki/Document_Object_Model" title="Document Object Model">Document Object Model</a> (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.<sup class="noprint Inline-Template Template-Fact" style="white-space:nowrap;">[<i><a href="/wiki/Wikipedia:Citation_needed" title="Wikipedia:Citation needed"><span title="This claim needs references to reliable sources. (November 2008)">citation needed</span></a></i>]</sup> </p><p>Unlike Java, a Groovy source code file can be executed as an (uncompiled) <a href="/wiki/Scripting_language" title="Scripting language">script</a>, if it contains code outside any class definition, if it is a class with a <i>main</i> method, or if it is a <i>Runnable</i> or <i>GroovyTestCase</i>. A Groovy script is fully parsed, compiled, and generated before executing (similar to Python and Ruby). This occurs under the hood, and the compiled version is not saved as an artifact of the process.<sup id="cite_ref-konig37_8_22-0" class="reference"><a href="#cite_note-konig37_8-22"><span class="cite-bracket">[</span>22<span class="cite-bracket">]</span></a></sup> </p> <div class="mw-heading mw-heading3"><h3 id="GroovyBeans,_properties"><span id="GroovyBeans.2C_properties"></span>GroovyBeans, properties</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Apache_Groovy&action=edit&section=3" title="Edit section: GroovyBeans, properties"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p><i>GroovyBeans</i> are Groovy's version of <a href="/wiki/JavaBeans" title="JavaBeans">JavaBeans</a>. Groovy implicitly generates getters and setters. In the following code, <code>setColor(String color)</code> and <code>getColor()</code> are implicitly generated. The last two lines, which appear to access color directly, are actually calling the implicitly generated methods.<sup id="cite_ref-konig38_9_23-0" class="reference"><a href="#cite_note-konig38_9-23"><span class="cite-bracket">[</span>23<span class="cite-bracket">]</span></a></sup> </p> <div class="mw-highlight mw-highlight-lang-groovy mw-content-ltr" dir="ltr"><pre><span></span><span class="kd">class</span><span class="w"> </span><span class="nc">AGroovyBean</span><span class="w"> </span><span class="o">{</span> <span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="n">color</span> <span class="o">}</span> <span class="kt">def</span><span class="w"> </span><span class="n">myGroovyBean</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">AGroovyBean</span><span class="o">()</span> <span class="n">myGroovyBean</span><span class="o">.</span><span class="na">setColor</span><span class="o">(</span><span class="s1">'baby blue'</span><span class="o">)</span> <span class="k">assert</span><span class="w"> </span><span class="n">myGroovyBean</span><span class="o">.</span><span class="na">getColor</span><span class="o">()</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="s1">'baby blue'</span> <span class="n">myGroovyBean</span><span class="o">.</span><span class="na">color</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s1">'pewter'</span> <span class="k">assert</span><span class="w"> </span><span class="n">myGroovyBean</span><span class="o">.</span><span class="na">color</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="s1">'pewter'</span> </pre></div> <p>Groovy offers simple, consistent syntax for handling <i>lists</i> and <i>maps</i>, reminiscent of Java's <i>array</i> syntax.<sup id="cite_ref-konig41_3_24-0" class="reference"><a href="#cite_note-konig41_3-24"><span class="cite-bracket">[</span>24<span class="cite-bracket">]</span></a></sup> </p> <div class="mw-highlight mw-highlight-lang-groovy mw-content-ltr" dir="ltr"><pre><span></span><span class="kt">def</span><span class="w"> </span><span class="n">movieList</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="o">[</span><span class="s1">'Dersu Uzala'</span><span class="o">,</span><span class="w"> </span><span class="s1">'Ran'</span><span class="o">,</span><span class="w"> </span><span class="s1">'Seven Samurai'</span><span class="o">]</span><span class="w"> </span><span class="c1">// Looks like an array, but is a list</span> <span class="k">assert</span><span class="w"> </span><span class="n">movieList</span><span class="o">[</span><span class="mi">2</span><span class="o">]</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="s1">'Seven Samurai'</span> <span class="n">movieList</span><span class="o">[</span><span class="mi">3</span><span class="o">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s1">'Casablanca'</span><span class="w"> </span><span class="c1">// Adds an element to the list</span> <span class="k">assert</span><span class="w"> </span><span class="n">movieList</span><span class="o">.</span><span class="na">size</span><span class="o">()</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">4</span> <span class="kt">def</span><span class="w"> </span><span class="n">monthMap</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="o">[</span><span class="w"> </span><span class="s1">'January'</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="mi">31</span><span class="o">,</span><span class="w"> </span><span class="s1">'February'</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="mi">28</span><span class="o">,</span><span class="w"> </span><span class="s1">'March'</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="mi">31</span><span class="w"> </span><span class="o">]</span><span class="w"> </span><span class="c1">// Declares a map</span> <span class="k">assert</span><span class="w"> </span><span class="n">monthMap</span><span class="o">[</span><span class="s1">'March'</span><span class="o">]</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">31</span><span class="w"> </span><span class="c1">// Accesses an entry</span> <span class="n">monthMap</span><span class="o">[</span><span class="s1">'April'</span><span class="o">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">30</span><span class="w"> </span><span class="c1">// Adds an entry to the map</span> <span class="k">assert</span><span class="w"> </span><span class="n">monthMap</span><span class="o">.</span><span class="na">size</span><span class="o">()</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">4</span> </pre></div> <div class="mw-heading mw-heading3"><h3 id="Prototype_extension">Prototype extension</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Apache_Groovy&action=edit&section=4" title="Edit section: Prototype extension"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Groovy offers support for <a href="/wiki/Prototype-based_programming" title="Prototype-based programming">prototype extension</a> through <code>ExpandoMetaClass</code>, Extension Modules (only in Groovy 2), Objective-C-like <a href="/wiki/Objective-C#Categories" title="Objective-C">Categories</a> and <code>DelegatingMetaClass</code>.<sup id="cite_ref-25" class="reference"><a href="#cite_note-25"><span class="cite-bracket">[</span>25<span class="cite-bracket">]</span></a></sup> </p><p><code>ExpandoMetaClass</code> offers a <a href="/wiki/Domain-specific_language" title="Domain-specific language">domain-specific language</a> (DSL) to express the changes in the class easily, similar to <a href="/wiki/Ruby_(programming_language)" title="Ruby (programming language)">Ruby's</a> open class concept: </p> <div class="mw-highlight mw-highlight-lang-groovy mw-content-ltr" dir="ltr"><pre><span></span><span class="n">Number</span><span class="o">.</span><span class="na">metaClass</span><span class="w"> </span><span class="o">{</span> <span class="w"> </span><span class="n">sqrt</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="o">{</span><span class="w"> </span><span class="n">Math</span><span class="o">.</span><span class="na">sqrt</span><span class="o">(</span><span class="n">delegate</span><span class="o">)</span><span class="w"> </span><span class="o">}</span> <span class="o">}</span> <span class="k">assert</span><span class="w"> </span><span class="mi">9</span><span class="o">.</span><span class="na">sqrt</span><span class="o">()</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">3</span> <span class="k">assert</span><span class="w"> </span><span class="mi">4</span><span class="o">.</span><span class="na">sqrt</span><span class="o">()</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">2</span> </pre></div> <p>Groovy's changes in code through prototyping are not visible in Java, since each attribute/method invocation in Groovy goes through the metaclass registry. The changed code can only be accessed from Java by going to the metaclass registry. </p><p>Groovy also allows overriding methods as <code>getProperty()</code>, <code>propertyMissing()</code> among others, enabling the developer to intercept calls to an object and specify an action for them, in a simplified <a href="/wiki/Aspect-oriented_programming" title="Aspect-oriented programming">aspect-oriented</a> way. The following code enables the class <code>java.lang.String</code> to respond to the <code>hex</code> property: </p> <div class="mw-highlight mw-highlight-lang-groovy mw-content-ltr" dir="ltr"><pre><span></span><span class="kd">enum</span><span class="w"> </span><span class="n">Color</span><span class="w"> </span><span class="o">{</span> <span class="w"> </span><span class="n">BLACK</span><span class="o">(</span><span class="s1">'#000000'</span><span class="o">),</span><span class="w"> </span><span class="n">WHITE</span><span class="o">(</span><span class="s1">'#FFFFFF'</span><span class="o">),</span><span class="w"> </span><span class="n">RED</span><span class="o">(</span><span class="s1">'#FF0000'</span><span class="o">),</span><span class="w"> </span><span class="n">BLUE</span><span class="o">(</span><span class="s1">'#0000FF'</span><span class="o">)</span> <span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="n">hex</span> <span class="w"> </span><span class="n">Color</span><span class="o">(</span><span class="n">String</span><span class="w"> </span><span class="n">hex</span><span class="o">)</span><span class="w"> </span><span class="o">{</span><span class="w"> </span> <span class="w"> </span><span class="k">this</span><span class="o">.</span><span class="na">hex</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">hex</span><span class="w"> </span> <span class="w"> </span><span class="o">}</span> <span class="o">}</span> <span class="n">String</span><span class="o">.</span><span class="na">metaClass</span><span class="o">.</span><span class="na">getProperty</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="o">{</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="n">property</span><span class="w"> </span><span class="o">-></span> <span class="w"> </span><span class="kt">def</span><span class="w"> </span><span class="n">stringColor</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">delegate</span> <span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="o">(</span><span class="n">property</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="s1">'hex'</span><span class="o">)</span><span class="w"> </span><span class="o">{</span> <span class="w"> </span><span class="n">Color</span><span class="o">.</span><span class="na">values</span><span class="o">().</span><span class="na">find</span><span class="w"> </span><span class="o">{</span><span class="w"> </span><span class="n">it</span><span class="o">.</span><span class="na">name</span><span class="o">().</span><span class="na">equalsIgnoreCase</span><span class="w"> </span><span class="n">stringColor</span><span class="w"> </span><span class="o">}?.</span><span class="na">hex</span> <span class="w"> </span><span class="o">}</span> <span class="o">}</span> <span class="k">assert</span><span class="w"> </span><span class="s2">"WHITE"</span><span class="o">.</span><span class="na">hex</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="s2">"#FFFFFF"</span> <span class="k">assert</span><span class="w"> </span><span class="s2">"BLUE"</span><span class="o">.</span><span class="na">hex</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="s2">"#0000FF"</span> <span class="k">assert</span><span class="w"> </span><span class="s2">"BLACK"</span><span class="o">.</span><span class="na">hex</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="s2">"#000000"</span> <span class="k">assert</span><span class="w"> </span><span class="s2">"GREEN"</span><span class="o">.</span><span class="na">hex</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="kc">null</span> </pre></div> <p>The Grails framework uses metaprogramming extensively to enable <a href="/wiki/Grails_(framework)#Persistence" title="Grails (framework)">GORM</a> dynamic finders, like <code>User.findByName('Josh')</code> and others.<sup id="cite_ref-26" class="reference"><a href="#cite_note-26"><span class="cite-bracket">[</span>26<span class="cite-bracket">]</span></a></sup> </p> <div class="mw-heading mw-heading3"><h3 id="Dot_and_parentheses">Dot and parentheses</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Apache_Groovy&action=edit&section=5" title="Edit section: Dot and parentheses"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Groovy's syntax permits omitting parentheses and dots in some situations. The following groovy code </p> <div class="mw-highlight mw-highlight-lang-groovy mw-content-ltr" dir="ltr"><pre><span></span><span class="n">take</span><span class="o">(</span><span class="n">coffee</span><span class="o">).</span><span class="na">with</span><span class="o">(</span><span class="n">sugar</span><span class="o">,</span><span class="w"> </span><span class="n">milk</span><span class="o">).</span><span class="na">and</span><span class="o">(</span><span class="n">liquor</span><span class="o">)</span> </pre></div> <p>can be written as </p> <div class="mw-highlight mw-highlight-lang-groovy mw-content-ltr" dir="ltr"><pre><span></span><span class="n">take</span><span class="w"> </span><span class="n">coffee</span><span class="w"> </span><span class="n">with</span><span class="w"> </span><span class="n">sugar</span><span class="o">,</span><span class="w"> </span><span class="n">milk</span><span class="w"> </span><span class="n">and</span><span class="w"> </span><span class="n">liquor</span> </pre></div> <p>enabling the development of <a href="/wiki/Domain-specific_language" title="Domain-specific language">domain-specific languages</a> (DSLs) that look like plain English. </p> <div class="mw-heading mw-heading3"><h3 id="Functional_programming">Functional programming</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Apache_Groovy&action=edit&section=6" title="Edit section: Functional programming"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Although Groovy is mostly an object-oriented language, it also offers <a href="/wiki/Functional_programming" title="Functional programming">functional programming</a> features. </p> <div class="mw-heading mw-heading4"><h4 id="Closures">Closures</h4><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Apache_Groovy&action=edit&section=7" title="Edit section: Closures"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>According to Groovy's documentation: "Closures in Groovy work similar to a 'method pointer', enabling code to be written and run in a later point in time".<sup id="cite_ref-27" class="reference"><a href="#cite_note-27"><span class="cite-bracket">[</span>27<span class="cite-bracket">]</span></a></sup> Groovy's closures support free variables, i.e. variables that have not been explicitly passed as a parameter to it, but exist in its declaration context, <a href="/wiki/Partial_application" title="Partial application">partial application</a> (that it terms '<a href="/wiki/Currying" title="Currying">currying</a>'<sup id="cite_ref-:0_28-0" class="reference"><a href="#cite_note-:0-28"><span class="cite-bracket">[</span>28<span class="cite-bracket">]</span></a></sup>), delegation, implicit, typed and untyped parameters. </p><p>When working on Collections of a determined type, the closure passed to an operation on the collection can be inferred: </p> <div class="mw-highlight mw-highlight-lang-groovy mw-content-ltr" dir="ltr"><pre><span></span><span class="n">list</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="o">[</span><span class="mi">1</span><span class="o">,</span><span class="w"> </span><span class="mi">2</span><span class="o">,</span><span class="w"> </span><span class="mi">3</span><span class="o">,</span><span class="w"> </span><span class="mi">4</span><span class="o">,</span><span class="w"> </span><span class="mi">5</span><span class="o">,</span><span class="w"> </span><span class="mi">6</span><span class="o">,</span><span class="w"> </span><span class="mi">7</span><span class="o">,</span><span class="w"> </span><span class="mi">8</span><span class="o">,</span><span class="w"> </span><span class="mi">9</span><span class="o">]</span> <span class="cm">/* </span> <span class="cm"> * Non-zero numbers are coerced to true, so when it % 2 == 0 (even), it is false.</span> <span class="cm"> * The type of the implicit "it" parameter can be inferred as an Integer by the IDE.</span> <span class="cm"> * It could also be written as:</span> <span class="cm"> * list.findAll { Integer i -> i % 2 }</span> <span class="cm"> * list.findAll { i -> i % 2 }</span> <span class="cm"> */</span> <span class="kt">def</span><span class="w"> </span><span class="n">odds</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">list</span><span class="o">.</span><span class="na">findAll</span><span class="w"> </span><span class="o">{</span><span class="w"> </span><span class="n">it</span><span class="w"> </span><span class="o">%</span><span class="w"> </span><span class="mi">2</span><span class="w"> </span><span class="o">}</span> <span class="k">assert</span><span class="w"> </span><span class="n">odds</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="o">[</span><span class="mi">1</span><span class="o">,</span><span class="w"> </span><span class="mi">3</span><span class="o">,</span><span class="w"> </span><span class="mi">5</span><span class="o">,</span><span class="w"> </span><span class="mi">7</span><span class="o">,</span><span class="w"> </span><span class="mi">9</span><span class="o">]</span> </pre></div> <p>A group of expressions can be written in a closure block without reference to an implementation and the responding object can be assigned at a later point using delegation: </p> <div class="mw-highlight mw-highlight-lang-groovy mw-content-ltr" dir="ltr"><pre><span></span><span class="c1">// This block of code contains expressions without reference to an implementation</span> <span class="kt">def</span><span class="w"> </span><span class="n">operations</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="o">{</span> <span class="w"> </span><span class="n">declare</span><span class="w"> </span><span class="mi">5</span> <span class="w"> </span><span class="n">sum</span><span class="w"> </span><span class="mi">4</span> <span class="w"> </span><span class="n">divide</span><span class="w"> </span><span class="mi">3</span> <span class="w"> </span><span class="n">print</span> <span class="o">}</span> </pre></div> <div class="mw-highlight mw-highlight-lang-groovy mw-content-ltr" dir="ltr"><pre><span></span><span class="cm">/* </span> <span class="cm"> * This class will handle the operations that can be used in the closure above. Another class</span> <span class="cm"> * could be declared having the same methods, but using, for example, webservice operations</span> <span class="cm"> * in the calculations.</span> <span class="cm"> */</span> <span class="kd">class</span><span class="w"> </span><span class="nc">Expression</span><span class="w"> </span><span class="o">{</span> <span class="w"> </span><span class="n">BigDecimal</span><span class="w"> </span><span class="n">value</span> <span class="w"> </span><span class="cm">/* </span> <span class="cm"> * Though an Integer is passed as a parameter, it is coerced into a BigDecimal, as was </span> <span class="cm"> * defined. If the class had a 'declare(Integer value)' method, it would be used instead.</span> <span class="cm"> */</span> <span class="w"> </span><span class="kt">def</span><span class="w"> </span><span class="n">declare</span><span class="o">(</span><span class="n">BigDecimal</span><span class="w"> </span><span class="n">value</span><span class="o">)</span><span class="w"> </span><span class="o">{</span> <span class="w"> </span><span class="k">this</span><span class="o">.</span><span class="na">value</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">value</span> <span class="w"> </span><span class="o">}</span> <span class="w"> </span> <span class="w"> </span><span class="kt">def</span><span class="w"> </span><span class="n">sum</span><span class="o">(</span><span class="n">BigDecimal</span><span class="w"> </span><span class="n">valueToAdd</span><span class="o">)</span><span class="w"> </span><span class="o">{</span> <span class="w"> </span><span class="k">this</span><span class="o">.</span><span class="na">value</span><span class="w"> </span><span class="o">+=</span><span class="w"> </span><span class="n">valueToAdd</span> <span class="w"> </span><span class="o">}</span> <span class="w"> </span> <span class="w"> </span><span class="kt">def</span><span class="w"> </span><span class="n">divide</span><span class="o">(</span><span class="n">BigDecimal</span><span class="w"> </span><span class="n">divisor</span><span class="o">)</span><span class="w"> </span><span class="o">{</span> <span class="w"> </span><span class="k">this</span><span class="o">.</span><span class="na">value</span><span class="w"> </span><span class="o">/=</span><span class="w"> </span><span class="n">divisor</span> <span class="w"> </span><span class="o">}</span> <span class="w"> </span> <span class="w"> </span><span class="kt">def</span><span class="w"> </span><span class="n">propertyMissing</span><span class="o">(</span><span class="n">String</span><span class="w"> </span><span class="n">property</span><span class="o">)</span><span class="w"> </span><span class="o">{</span> <span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="o">(</span><span class="n">property</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="s2">"print"</span><span class="o">)</span><span class="w"> </span><span class="n">println</span><span class="w"> </span><span class="n">value</span> <span class="w"> </span><span class="o">}</span> <span class="o">}</span> </pre></div> <div class="mw-highlight mw-highlight-lang-groovy mw-content-ltr" dir="ltr"><pre><span></span><span class="c1">// Here is defined who is going to respond the expressions in the block of code above.</span> <span class="n">operations</span><span class="o">.</span><span class="na">delegate</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">Expression</span><span class="o">()</span> <span class="n">operations</span><span class="o">()</span> </pre></div> <div class="mw-heading mw-heading4"><h4 id="Curry">Curry</h4><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Apache_Groovy&action=edit&section=8" title="Edit section: Curry"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Usually called <i><a href="/wiki/Partial_application" title="Partial application">partial application</a></i>,<sup id="cite_ref-:0_28-1" class="reference"><a href="#cite_note-:0-28"><span class="cite-bracket">[</span>28<span class="cite-bracket">]</span></a></sup> this Groovy feature allows closures' parameters to be set to a default parameter in any of their arguments, creating a new closure with the bound value. Supplying one argument to the <code>curry()</code> method will fix argument one. Supplying N arguments will fix arguments 1 .. N. </p> <div class="mw-highlight mw-highlight-lang-groovy mw-content-ltr" dir="ltr"><pre><span></span><span class="kt">def</span><span class="w"> </span><span class="n">joinTwoWordsWithSymbol</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="o">{</span><span class="w"> </span><span class="n">symbol</span><span class="o">,</span><span class="w"> </span><span class="n">first</span><span class="o">,</span><span class="w"> </span><span class="n">second</span><span class="w"> </span><span class="o">-></span><span class="w"> </span><span class="n">first</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">symbol</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">second</span><span class="w"> </span><span class="o">}</span> <span class="k">assert</span><span class="w"> </span><span class="n">joinTwoWordsWithSymbol</span><span class="o">(</span><span class="s1">'#'</span><span class="o">,</span><span class="w"> </span><span class="s1">'Hello'</span><span class="o">,</span><span class="w"> </span><span class="s1">'World'</span><span class="o">)</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="s1">'Hello#World'</span> <span class="kt">def</span><span class="w"> </span><span class="n">concatWords</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">joinTwoWordsWithSymbol</span><span class="o">.</span><span class="na">curry</span><span class="o">(</span><span class="s1">' '</span><span class="o">)</span> <span class="k">assert</span><span class="w"> </span><span class="n">concatWords</span><span class="o">(</span><span class="s1">'Hello'</span><span class="o">,</span><span class="w"> </span><span class="s1">'World'</span><span class="o">)</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="s1">'Hello World'</span> <span class="kt">def</span><span class="w"> </span><span class="n">prependHello</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">concatWords</span><span class="o">.</span><span class="na">curry</span><span class="o">(</span><span class="s1">'Hello'</span><span class="o">)</span> <span class="c1">//def prependHello = joinTwoWordsWithSymbol.curry(' ', 'Hello')</span> <span class="k">assert</span><span class="w"> </span><span class="n">prependHello</span><span class="o">(</span><span class="s1">'World'</span><span class="o">)</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="s1">'Hello World'</span> </pre></div> <p>Curry can also be used in the reverse direction (fixing the last N arguments) using <code>rcurry()</code>. </p> <div class="mw-highlight mw-highlight-lang-groovy mw-content-ltr" dir="ltr"><pre><span></span><span class="kt">def</span><span class="w"> </span><span class="n">power</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="o">{</span><span class="w"> </span><span class="n">BigDecimal</span><span class="w"> </span><span class="n">value</span><span class="o">,</span><span class="w"> </span><span class="n">BigDecimal</span><span class="w"> </span><span class="n">power</span><span class="w"> </span><span class="o">-></span> <span class="w"> </span><span class="n">value</span><span class="o">**</span><span class="n">power</span> <span class="o">}</span> <span class="kt">def</span><span class="w"> </span><span class="n">square</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">power</span><span class="o">.</span><span class="na">rcurry</span><span class="o">(</span><span class="mi">2</span><span class="o">)</span> <span class="kt">def</span><span class="w"> </span><span class="n">cube</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">power</span><span class="o">.</span><span class="na">rcurry</span><span class="o">(</span><span class="mi">3</span><span class="o">)</span> <span class="k">assert</span><span class="w"> </span><span class="nf">power</span><span class="o">(</span><span class="mi">2</span><span class="o">,</span><span class="w"> </span><span class="mi">2</span><span class="o">)</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">4</span> <span class="k">assert</span><span class="w"> </span><span class="n">square</span><span class="o">(</span><span class="mi">4</span><span class="o">)</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">16</span> <span class="k">assert</span><span class="w"> </span><span class="n">cube</span><span class="o">(</span><span class="mi">3</span><span class="o">)</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">27</span> </pre></div> <p>Groovy also supports <a href="/wiki/Lazy_evaluation" title="Lazy evaluation">lazy evaluation</a>,<sup id="cite_ref-29" class="reference"><a href="#cite_note-29"><span class="cite-bracket">[</span>29<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-30" class="reference"><a href="#cite_note-30"><span class="cite-bracket">[</span>30<span class="cite-bracket">]</span></a></sup> <a href="/wiki/Fold_(higher-order_function)" title="Fold (higher-order function)">reduce/fold</a>,<sup id="cite_ref-31" class="reference"><a href="#cite_note-31"><span class="cite-bracket">[</span>31<span class="cite-bracket">]</span></a></sup> <a href="/wiki/Data_structure" title="Data structure">infinite structures</a> and <a href="/wiki/Immutability" class="mw-redirect" title="Immutability">immutability</a>,<sup id="cite_ref-32" class="reference"><a href="#cite_note-32"><span class="cite-bracket">[</span>32<span class="cite-bracket">]</span></a></sup> among others.<sup id="cite_ref-33" class="reference"><a href="#cite_note-33"><span class="cite-bracket">[</span>33<span class="cite-bracket">]</span></a></sup> </p> <div class="mw-heading mw-heading3"><h3 id="JSON_and_XML_processing">JSON and XML processing</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Apache_Groovy&action=edit&section=9" title="Edit section: JSON and XML processing"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>On JavaScript Object Notation (<a href="/wiki/JSON" title="JSON">JSON</a>) and XML processing, Groovy employs the <a href="/wiki/Builder_pattern" title="Builder pattern">Builder pattern</a>, making the production of the data structure less verbose. For example, the following XML: </p> <div class="mw-highlight mw-highlight-lang-xml mw-content-ltr" dir="ltr"><pre><span></span><span class="nt"><languages></span> <span class="w"> </span><span class="nt"><language</span><span class="w"> </span><span class="na">year=</span><span class="s">"1995"</span><span class="nt">></span> <span class="w"> </span><span class="nt"><name></span>Java<span class="nt"></name></span> <span class="w"> </span><span class="nt"><paradigm></span>object<span class="w"> </span>oriented<span class="nt"></paradigm></span> <span class="w"> </span><span class="nt"><typing></span>static<span class="nt"></typing></span> <span class="w"> </span><span class="nt"></language></span> <span class="w"> </span><span class="nt"><language</span><span class="w"> </span><span class="na">year=</span><span class="s">"1995"</span><span class="nt">></span> <span class="w"> </span><span class="nt"><name></span>Ruby<span class="nt"></name></span> <span class="w"> </span><span class="nt"><paradigm></span>functional,<span class="w"> </span>object<span class="w"> </span>oriented<span class="nt"></paradigm></span> <span class="w"> </span><span class="nt"><typing></span>duck<span class="w"> </span>typing,<span class="w"> </span>dynamic<span class="nt"></typing></span> <span class="w"> </span><span class="nt"></language></span> <span class="w"> </span><span class="nt"><language</span><span class="w"> </span><span class="na">year=</span><span class="s">"2003"</span><span class="nt">></span> <span class="w"> </span><span class="nt"><name></span>Groovy<span class="nt"></name></span> <span class="w"> </span><span class="nt"><paradigm></span>functional,<span class="w"> </span>object<span class="w"> </span>oriented<span class="nt"></paradigm></span> <span class="w"> </span><span class="nt"><typing></span>duck<span class="w"> </span>typing,<span class="w"> </span>dynamic,<span class="w"> </span>static<span class="nt"></typing></span> <span class="w"> </span><span class="nt"></language></span> <span class="nt"></languages></span> </pre></div> <p>can be generated via the following Groovy code: </p> <div class="mw-highlight mw-highlight-lang-groovy mw-content-ltr" dir="ltr"><pre><span></span><span class="kt">def</span><span class="w"> </span><span class="n">writer</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">StringWriter</span><span class="o">()</span> <span class="kt">def</span><span class="w"> </span><span class="n">builder</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">groovy</span><span class="o">.</span><span class="na">xml</span><span class="o">.</span><span class="na">MarkupBuilder</span><span class="o">(</span><span class="n">writer</span><span class="o">)</span> <span class="n">builder</span><span class="o">.</span><span class="na">languages</span><span class="w"> </span><span class="o">{</span> <span class="w"> </span><span class="n">language</span><span class="o">(</span><span class="nl">year:</span><span class="w"> </span><span class="mi">1995</span><span class="o">)</span><span class="w"> </span><span class="o">{</span> <span class="w"> </span><span class="n">name</span><span class="w"> </span><span class="s2">"Java"</span> <span class="w"> </span><span class="n">paradigm</span><span class="w"> </span><span class="s2">"object oriented"</span> <span class="w"> </span><span class="n">typing</span><span class="w"> </span><span class="s2">"static"</span> <span class="w"> </span><span class="o">}</span> <span class="w"> </span><span class="n">language</span><span class="w"> </span><span class="o">(</span><span class="nl">year:</span><span class="w"> </span><span class="mi">1995</span><span class="o">)</span><span class="w"> </span><span class="o">{</span> <span class="w"> </span><span class="n">name</span><span class="w"> </span><span class="s2">"Ruby"</span> <span class="w"> </span><span class="n">paradigm</span><span class="w"> </span><span class="s2">"functional, object oriented"</span> <span class="w"> </span><span class="n">typing</span><span class="w"> </span><span class="s2">"duck typing, dynamic"</span> <span class="w"> </span><span class="o">}</span> <span class="w"> </span><span class="n">language</span><span class="w"> </span><span class="o">(</span><span class="nl">year:</span><span class="w"> </span><span class="mi">2003</span><span class="o">)</span><span class="w"> </span><span class="o">{</span> <span class="w"> </span><span class="n">name</span><span class="w"> </span><span class="s2">"Groovy"</span> <span class="w"> </span><span class="n">paradigm</span><span class="w"> </span><span class="s2">"functional, object oriented"</span> <span class="w"> </span><span class="n">typing</span><span class="w"> </span><span class="s2">"duck typing, dynamic, static"</span> <span class="w"> </span><span class="o">}</span> <span class="o">}</span> </pre></div> <p>and also can be processed in a streaming way through <code>StreamingMarkupBuilder</code>. To change the implementation to JSON, the <code>MarkupBuilder</code> can be swapped to <code>JsonBuilder</code>.<sup id="cite_ref-34" class="reference"><a href="#cite_note-34"><span class="cite-bracket">[</span>34<span class="cite-bracket">]</span></a></sup> </p><p>To parse it and search for a functional language, Groovy's <code>findAll</code> method can serve: </p> <div class="mw-highlight mw-highlight-lang-groovy mw-content-ltr" dir="ltr"><pre><span></span><span class="kt">def</span><span class="w"> </span><span class="n">languages</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">XmlSlurper</span><span class="o">().</span><span class="na">parseText</span><span class="w"> </span><span class="n">writer</span><span class="o">.</span><span class="na">toString</span><span class="o">()</span> <span class="c1">// Here is employed Groovy's regex syntax for a matcher (=~) that will be coerced to a </span> <span class="c1">// boolean value: either true, if the value contains our string, or false otherwise.</span> <span class="kt">def</span><span class="w"> </span><span class="n">functional</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">languages</span><span class="o">.</span><span class="na">language</span><span class="o">.</span><span class="na">findAll</span><span class="w"> </span><span class="o">{</span><span class="w"> </span><span class="n">it</span><span class="o">.</span><span class="na">paradigm</span><span class="w"> </span><span class="o">=~</span><span class="w"> </span><span class="s2">"functional"</span><span class="w"> </span><span class="o">}</span> <span class="k">assert</span><span class="w"> </span><span class="n">functional</span><span class="o">.</span><span class="na">collect</span><span class="w"> </span><span class="o">{</span><span class="w"> </span><span class="n">it</span><span class="o">.</span><span class="na">name</span><span class="w"> </span><span class="o">}</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="o">[</span><span class="s2">"Groovy"</span><span class="o">,</span><span class="w"> </span><span class="s2">"Ruby"</span><span class="o">]</span> </pre></div> <div class="mw-heading mw-heading3"><h3 id="String_interpolation">String interpolation</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Apache_Groovy&action=edit&section=10" title="Edit section: String interpolation"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>In Groovy, strings can be interpolated with variables and expressions by using GStrings:<sup id="cite_ref-35" class="reference"><a href="#cite_note-35"><span class="cite-bracket">[</span>35<span class="cite-bracket">]</span></a></sup> </p> <div class="mw-highlight mw-highlight-lang-groovy mw-content-ltr" dir="ltr"><pre><span></span><span class="n">BigDecimal</span><span class="w"> </span><span class="n">account</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mf">10.0</span> <span class="kt">def</span><span class="w"> </span><span class="n">text</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"The account shows currently a balance of $account"</span> <span class="k">assert</span><span class="w"> </span><span class="n">text</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="s2">"The account shows currently a balance of 10.0"</span> </pre></div> <p>GStrings containing variables and expressions must be declared using double quotes. </p><p>A complex expression must be enclosed in curly brackets. This prevents parts of it from being interpreted as belonging to the surrounding string instead of to the expression: </p> <div class="mw-highlight mw-highlight-lang-groovy mw-content-ltr" dir="ltr"><pre><span></span><span class="n">BigDecimal</span><span class="w"> </span><span class="n">minus</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mf">4.0</span> <span class="n">text</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"The account shows currently a balance of ${account - minus}"</span> <span class="k">assert</span><span class="w"> </span><span class="n">text</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="s2">"The account shows currently a balance of 6.0"</span> <span class="c1">// Without the brackets to isolate the expression, this would result:</span> <span class="n">text</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"The account shows currently a balance of $account - minus"</span> <span class="k">assert</span><span class="w"> </span><span class="n">text</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="s2">"The account shows currently a balance of 10.0 - minus"</span> </pre></div> <p>Expression evaluation can be deferred by employing arrow syntax: </p> <div class="mw-highlight mw-highlight-lang-groovy mw-content-ltr" dir="ltr"><pre><span></span><span class="n">BigDecimal</span><span class="w"> </span><span class="n">tax</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mf">0.15</span> <span class="n">text</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"The account shows currently a balance of ${->account - account*tax}"</span> <span class="n">tax</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mf">0.10</span> <span class="c1">// The tax value was changed AFTER declaration of the GString. The expression </span> <span class="c1">// variables are bound only when the expression must actually be evaluated:</span> <span class="k">assert</span><span class="w"> </span><span class="n">text</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="s2">"The account shows currently a balance of 9.000"</span> </pre></div> <div class="mw-heading mw-heading3"><h3 id="Abstract_syntax_tree_transformation">Abstract syntax tree transformation</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Apache_Groovy&action=edit&section=11" title="Edit section: Abstract syntax tree transformation"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>According to Groovy's own documentation, "When the Groovy compiler compiles Groovy scripts and classes, at some point in the process, the source code will end up being represented in memory in the form of a Concrete Syntax Tree, then transformed into an Abstract Syntax Tree. The purpose of AST Transformations is to let developers hook into the compilation process to be able to modify the AST before it is turned into bytecode that will be run by the JVM. AST Transformations provides Groovy with improved compile-time metaprogramming capabilities allowing powerful flexibility at the language level, without a runtime performance penalty."<sup id="cite_ref-36" class="reference"><a href="#cite_note-36"><span class="cite-bracket">[</span>36<span class="cite-bracket">]</span></a></sup> </p><p>Examples of ASTs in Groovy are: </p> <ul><li>Category and <a href="/wiki/Mixin" title="Mixin">Mixin</a> transformation</li> <li>Immutable AST Macro</li> <li>Newify transformation</li> <li>Singleton transformation</li></ul> <p>among others. </p><p>The testing framework <a href="/wiki/Spock_(testing_framework)" title="Spock (testing framework)">Spock</a> uses AST transformations to allow the programmer to write tests in a syntax not supported by Groovy, but the relevant code is then manipulated in the AST to valid code.<sup id="cite_ref-37" class="reference"><a href="#cite_note-37"><span class="cite-bracket">[</span>37<span class="cite-bracket">]</span></a></sup> An example of such a test is: </p> <div class="mw-highlight mw-highlight-lang-groovy mw-content-ltr" dir="ltr"><pre><span></span><span class="kt">def</span><span class="w"> </span><span class="nf">"maximum of #a and #b is #c"</span><span class="w"> </span><span class="o">()</span><span class="w"> </span><span class="o">{</span> <span class="w"> </span><span class="nl">expect:</span> <span class="w"> </span><span class="n">Math</span><span class="o">.</span><span class="na">max</span><span class="w"> </span><span class="o">(</span><span class="n">a</span><span class="o">,</span><span class="w"> </span><span class="n">b</span><span class="o">)</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">c</span> <span class="w"> </span><span class="nl">where:</span> <span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">b</span><span class="w"> </span><span class="o">||</span><span class="w"> </span><span class="n">c</span> <span class="w"> </span><span class="mi">3</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">5</span><span class="w"> </span><span class="o">||</span><span class="w"> </span><span class="mi">5</span> <span class="w"> </span><span class="mi">7</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="o">||</span><span class="w"> </span><span class="mi">7</span> <span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="o">||</span><span class="w"> </span><span class="mi">0</span> <span class="o">}</span> </pre></div> <div class="mw-heading mw-heading3"><h3 id="Traits">Traits</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Apache_Groovy&action=edit&section=12" title="Edit section: Traits"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>According to Groovy's documentation, "<a href="/wiki/Trait_(computer_programming)" title="Trait (computer programming)">Traits</a> are a structural construct of the language that allows: composition of behaviors, runtime implementation of interfaces, behavior overriding, and compatibility with static type checking/compilation." </p><p>Traits can be seen as <a href="/wiki/Interface_(object-oriented_programming)" title="Interface (object-oriented programming)">interfaces</a> carrying both default implementations and state. A trait is defined using the trait keyword: </p> <div class="mw-highlight mw-highlight-lang-groovy mw-content-ltr" dir="ltr"><pre><span></span><span class="n">trait</span><span class="w"> </span><span class="n">FlyingAbility</span><span class="w"> </span><span class="o">{</span><span class="w"> </span><span class="cm">/* declaration of a trait */</span> <span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="n">fly</span><span class="o">()</span><span class="w"> </span><span class="o">{</span><span class="w"> </span><span class="s2">"I'm flying!"</span><span class="w"> </span><span class="o">}</span><span class="w"> </span><span class="cm">/* declaration of a method inside a trait */</span> <span class="o">}</span> </pre></div> <p>Then, it can be used like a normal interface using the keyword <code>implements</code>: </p> <div class="mw-highlight mw-highlight-lang-groovy mw-content-ltr" dir="ltr"><pre><span></span><span class="kd">class</span><span class="w"> </span><span class="nc">Bird</span><span class="w"> </span><span class="kd">implements</span><span class="w"> </span><span class="n">FlyingAbility</span><span class="w"> </span><span class="o">{}</span><span class="w"> </span><span class="cm">/* Adds the trait FlyingAbility to the Bird class capabilities */</span> <span class="kt">def</span><span class="w"> </span><span class="n">bird</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">Bird</span><span class="o">()</span><span class="w"> </span><span class="cm">/* instantiate a new Bird */</span> <span class="k">assert</span><span class="w"> </span><span class="n">bird</span><span class="o">.</span><span class="na">fly</span><span class="o">()</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="s2">"I'm flying!"</span><span class="w"> </span><span class="cm">/* the Bird class automatically gets the behavior of the FlyingAbility trait */</span> </pre></div> <p>Traits allow a wide range of abilities, from simple composition to testing. </p> <div class="mw-heading mw-heading2"><h2 id="Adoption">Adoption</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Apache_Groovy&action=edit&section=13" title="Edit section: Adoption"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Notable examples of Groovy adoption include: </p> <ul><li>Adaptavist ScriptRunner, embeds a Groovy implementation to automate and extend <a href="/wiki/Atlassian" title="Atlassian">Atlassian</a> tools, in use by more than 20000 organisations around the world.<sup id="cite_ref-38" class="reference"><a href="#cite_note-38"><span class="cite-bracket">[</span>38<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-39" class="reference"><a href="#cite_note-39"><span class="cite-bracket">[</span>39<span class="cite-bracket">]</span></a></sup></li> <li><a href="/wiki/Apache_OFBiz" title="Apache OFBiz">Apache OFBiz</a>, the <a href="/wiki/Open-source_software" title="Open-source software">open-source</a> <a href="/wiki/Enterprise_resource_planning" title="Enterprise resource planning">enterprise resource planning</a> (ERP) system, uses Groovy.<sup id="cite_ref-40" class="reference"><a href="#cite_note-40"><span class="cite-bracket">[</span>40<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-41" class="reference"><a href="#cite_note-41"><span class="cite-bracket">[</span>41<span class="cite-bracket">]</span></a></sup></li> <li><a href="/wiki/Eucalyptus_(software)" title="Eucalyptus (software)">Eucalyptus</a>, a cloud management system, uses a significant amount of Groovy.</li> <li><a href="/wiki/Gradle" title="Gradle">Gradle</a> is a popular build automation tool using Groovy.</li> <li><a href="/wiki/LinkedIn" title="LinkedIn">LinkedIn</a> uses Groovy and Grails for some of their subsystems.<sup id="cite_ref-42" class="reference"><a href="#cite_note-42"><span class="cite-bracket">[</span>42<span class="cite-bracket">]</span></a></sup></li> <li>LogicMonitor, a cloud-based monitoring platform, uses Groovy in script-based data sources.<sup id="cite_ref-43" class="reference"><a href="#cite_note-43"><span class="cite-bracket">[</span>43<span class="cite-bracket">]</span></a></sup></li> <li><a href="/wiki/Jenkins_(software)" title="Jenkins (software)">Jenkins</a>, a platform for <a href="/wiki/Continuous_integration" title="Continuous integration">continuous integration</a>. With version 2, Jenkins includes a <i>Pipeline</i> plugin that allows for build instructions to be written in Groovy.<sup id="cite_ref-44" class="reference"><a href="#cite_note-44"><span class="cite-bracket">[</span>44<span class="cite-bracket">]</span></a></sup></li> <li>Liferay, uses groovy in their kaleo workflow</li> <li><a href="/wiki/Sky.com" class="mw-redirect" title="Sky.com">Sky.com</a> uses Groovy and Grails to serve massive online media content.<sup id="cite_ref-45" class="reference"><a href="#cite_note-45"><span class="cite-bracket">[</span>45<span class="cite-bracket">]</span></a></sup></li> <li><a href="/wiki/SmartThings" title="SmartThings">SmartThings</a>, an open platform for <a href="/wiki/Smart_home" class="mw-redirect" title="Smart home">smart homes</a> and the consumer <a href="/wiki/Internet_of_Things" class="mw-redirect" title="Internet of Things">Internet of Things</a>, uses a security-oriented subset of Groovy<sup id="cite_ref-46" class="reference"><a href="#cite_note-46"><span class="cite-bracket">[</span>46<span class="cite-bracket">]</span></a></sup></li> <li><a href="/wiki/SoapUI" title="SoapUI">SoapUI</a> provides Groovy as a language for webservice tests development.<sup id="cite_ref-47" class="reference"><a href="#cite_note-47"><span class="cite-bracket">[</span>47<span class="cite-bracket">]</span></a></sup></li> <li><a href="/w/index.php?title=Survata&action=edit&redlink=1" class="new" title="Survata (page does not exist)">Survata</a>, a market research startup, uses Groovy and Grails.<sup class="noprint Inline-Template Template-Fact" style="white-space:nowrap;">[<i><a href="/wiki/Wikipedia:Citation_needed" title="Wikipedia:Citation needed"><span title="This claim needs references to reliable sources. (June 2016)">citation needed</span></a></i>]</sup></li> <li>The European Patent Office (EPO) developed a <a href="/wiki/Dataflow_programming" title="Dataflow programming">dataflow programming</a> language in Groovy "to leverage similarities in the processes for communicating with each individual country’s patent office, and transform them into a single, universal process."<sup class="noprint Inline-Template Template-Fact" style="white-space:nowrap;">[<i><a href="/wiki/Wikipedia:Citation_needed" title="Wikipedia:Citation needed"><span title="This claim needs references to reliable sources. (May 2012)">citation needed</span></a></i>]</sup></li> <li>Though Groovy can be integrated into any JVM environment, the JBoss Seam framework provides Groovy, besides Java, as a development language, out of the box.<sup id="cite_ref-48" class="reference"><a href="#cite_note-48"><span class="cite-bracket">[</span>48<span class="cite-bracket">]</span></a></sup></li> <li>vCalc.com uses Groovy for all of the user defined mathematics in its math crowd-sourcing engine.<sup id="cite_ref-49" class="reference"><a href="#cite_note-49"><span class="cite-bracket">[</span>49<span class="cite-bracket">]</span></a></sup></li> <li>Wired.com uses Groovy and Grails for the Product Reviews standalone section of the website.<sup id="cite_ref-50" class="reference"><a href="#cite_note-50"><span class="cite-bracket">[</span>50<span class="cite-bracket">]</span></a></sup></li> <li><a href="/wiki/XWiki" title="XWiki">XWiki</a> SAS uses Groovy as scripting language in their collaborative open-source product.<sup id="cite_ref-51" class="reference"><a href="#cite_note-51"><span class="cite-bracket">[</span>51<span class="cite-bracket">]</span></a></sup></li></ul> <div class="mw-heading mw-heading2"><h2 id="IDE_support">IDE support</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Apache_Groovy&action=edit&section=14" title="Edit section: IDE support"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Many <a href="/wiki/Integrated_development_environment" title="Integrated development environment">integrated development environments</a> (IDEs) and <a href="/wiki/Text_editor" title="Text editor">text editors</a> support Groovy: </p> <ul><li><a href="/wiki/Android_Studio" title="Android Studio">Android Studio</a>, IDE used for making <a href="/wiki/Android_(operating_system)" title="Android (operating system)">Android</a> apps</li> <li><a href="/wiki/Atom_(text_editor)" title="Atom (text editor)">Atom</a> editor</li> <li><a href="/wiki/Eclipse_(software)" title="Eclipse (software)">Eclipse</a>, through Groovy-Eclipse</li> <li><a href="/wiki/Emacs" title="Emacs">Emacs</a>, using the groovy-emacs-mode project's groovy-mode.</li> <li><a href="/wiki/IntelliJ_IDEA" title="IntelliJ IDEA">IntelliJ IDEA</a>, Community Edition, Grails/Griffon in the Ultimate Edition only</li> <li><a href="/wiki/JDeveloper" title="JDeveloper">JDeveloper</a>, for use with <a href="/wiki/Oracle_ADF" class="mw-redirect" title="Oracle ADF">Oracle ADF</a></li> <li><a href="/wiki/JEdit" title="JEdit">jEdit</a>, an advanced text editor for the <a href="/wiki/Java_(software_platform)" title="Java (software platform)">Java platform</a></li> <li><a href="/wiki/Kate_(text_editor)" title="Kate (text editor)">Kate</a>, an advanced text editor for <a href="/wiki/KDE" title="KDE">KDE</a> supports Groovy and over 200 other file formats</li> <li><a href="/wiki/NetBeans" title="NetBeans">NetBeans</a>, since version 6.5</li> <li><a href="/wiki/Notepad%2B%2B" title="Notepad++">Notepad++</a>, an advanced text editor for <a href="/wiki/Microsoft_Windows" title="Microsoft Windows">Microsoft Windows</a></li> <li><a href="/wiki/Sublime_Text" title="Sublime Text">Sublime Text</a>, a cross platform text editor</li> <li><a href="/wiki/TextMate" title="TextMate">TextMate</a></li> <li><a href="/wiki/Visual_Studio_Code" title="Visual Studio Code">Visual Studio Code</a></li> <li><a href="/wiki/UltraEdit" title="UltraEdit">UltraEdit</a>, general purpose program editor</li></ul> <div class="mw-heading mw-heading2"><h2 id="Dialects">Dialects</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Apache_Groovy&action=edit&section=15" title="Edit section: Dialects"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>There is one alternative implementation of Groovy: </p> <ul><li>Grooscript converts Groovy code to <a href="/wiki/JavaScript" title="JavaScript">JavaScript</a> code.<sup id="cite_ref-52" class="reference"><a href="#cite_note-52"><span class="cite-bracket">[</span>52<span class="cite-bracket">]</span></a></sup> Although Grooscript has some limitations compared to Apache Groovy, it can use domain classes in both the server and the client.<sup id="cite_ref-53" class="reference"><a href="#cite_note-53"><span class="cite-bracket">[</span>53<span class="cite-bracket">]</span></a></sup> Plugin support for <a href="/wiki/Grails_(framework)" title="Grails (framework)">Grails</a> version 3.0 is provided, as well as online code conversions.<sup id="cite_ref-54" class="reference"><a href="#cite_note-54"><span class="cite-bracket">[</span>54<span class="cite-bracket">]</span></a></sup></li></ul> <div class="mw-heading mw-heading2"><h2 id="See_also">See also</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Apache_Groovy&action=edit&section=16" title="Edit section: See also"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <style data-mw-deduplicate="TemplateStyles:r1239009302">.mw-parser-output .portalbox{padding:0;margin:0.5em 0;display:table;box-sizing:border-box;max-width:175px;list-style:none}.mw-parser-output .portalborder{border:1px solid var(--border-color-base,#a2a9b1);padding:0.1em;background:var(--background-color-neutral-subtle,#f8f9fa)}.mw-parser-output .portalbox-entry{display:table-row;font-size:85%;line-height:110%;height:1.9em;font-style:italic;font-weight:bold}.mw-parser-output .portalbox-image{display:table-cell;padding:0.2em;vertical-align:middle;text-align:center}.mw-parser-output .portalbox-link{display:table-cell;padding:0.2em 0.2em 0.2em 0.3em;vertical-align:middle}@media(min-width:720px){.mw-parser-output .portalleft{clear:left;float:left;margin:0.5em 1em 0.5em 0}.mw-parser-output .portalright{clear:right;float:right;margin:0.5em 0 0.5em 1em}}</style><ul role="navigation" aria-label="Portals" class="noprint portalbox portalborder portalright"> <li class="portalbox-entry"><span class="portalbox-image"><span class="noviewer" typeof="mw:File"><span><img alt="" src="//upload.wikimedia.org/wikipedia/commons/thumb/3/31/Free_and_open-source_software_logo_%282009%29.svg/28px-Free_and_open-source_software_logo_%282009%29.svg.png" decoding="async" width="28" height="28" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/3/31/Free_and_open-source_software_logo_%282009%29.svg/42px-Free_and_open-source_software_logo_%282009%29.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/3/31/Free_and_open-source_software_logo_%282009%29.svg/56px-Free_and_open-source_software_logo_%282009%29.svg.png 2x" data-file-width="512" data-file-height="512" /></span></span></span><span class="portalbox-link"><a href="/wiki/Portal:Free_and_open-source_software" title="Portal:Free and open-source software">Free and open-source software portal</a></span></li><li class="portalbox-entry"><span class="portalbox-image"><span class="noviewer" typeof="mw:File"><a href="/wiki/File:Octicons-terminal.svg" class="mw-file-description"><img alt="icon" src="//upload.wikimedia.org/wikipedia/commons/thumb/6/6f/Octicons-terminal.svg/24px-Octicons-terminal.svg.png" decoding="async" width="24" height="28" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/6/6f/Octicons-terminal.svg/37px-Octicons-terminal.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/6/6f/Octicons-terminal.svg/49px-Octicons-terminal.svg.png 2x" data-file-width="896" data-file-height="1024" /></a></span></span><span class="portalbox-link"><a href="/wiki/Portal:Computer_programming" title="Portal:Computer programming">Computer programming portal</a></span></li></ul> <ul><li><a href="/wiki/Comparison_of_programming_languages" title="Comparison of programming languages">Comparison of programming languages</a></li> <li><a href="/wiki/Griffon_(framework)" title="Griffon (framework)">Griffon (framework)</a> – a desktop framework</li> <li><a href="/wiki/WebSphere_sMash" title="WebSphere sMash">Project Zero</a></li> <li><a href="/wiki/Spock_(testing_framework)" title="Spock (testing framework)">Spock (testing framework)</a></li></ul> <div class="mw-heading mw-heading2"><h2 id="References">References</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Apache_Groovy&action=edit&section=17" title="Edit section: References"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <div class="mw-heading mw-heading3"><h3 id="Citations">Citations</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Apache_Groovy&action=edit&section=18" title="Edit section: Citations"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <style data-mw-deduplicate="TemplateStyles:r1239543626">.mw-parser-output .reflist{margin-bottom:0.5em;list-style-type:decimal}@media screen{.mw-parser-output .reflist{font-size:90%}}.mw-parser-output .reflist .references{font-size:100%;margin-bottom:0;list-style-type:inherit}.mw-parser-output .reflist-columns-2{column-width:30em}.mw-parser-output .reflist-columns-3{column-width:25em}.mw-parser-output .reflist-columns{margin-top:0.3em}.mw-parser-output .reflist-columns ol{margin-top:0}.mw-parser-output .reflist-columns li{page-break-inside:avoid;break-inside:avoid-column}.mw-parser-output .reflist-upper-alpha{list-style-type:upper-alpha}.mw-parser-output .reflist-upper-roman{list-style-type:upper-roman}.mw-parser-output .reflist-lower-alpha{list-style-type:lower-alpha}.mw-parser-output .reflist-lower-greek{list-style-type:lower-greek}.mw-parser-output .reflist-lower-roman{list-style-type:lower-roman}</style><div class="reflist reflist-columns references-column-width" style="column-width: 30em;"> <ol class="references"> <li id="cite_note-wikidata-16cfa588007f1a320e55f390976ca730bbfafbe3-v18-1"><span class="mw-cite-backlink"><b><a href="#cite_ref-wikidata-16cfa588007f1a320e55f390976ca730bbfafbe3-v18_1-0">^</a></b></span> <span class="reference-text"><style data-mw-deduplicate="TemplateStyles:r1238218222">.mw-parser-output cite.citation{font-style:inherit;word-wrap:break-word}.mw-parser-output .citation q{quotes:"\"""\"""'""'"}.mw-parser-output .citation:target{background-color:rgba(0,127,255,0.133)}.mw-parser-output .id-lock-free.id-lock-free a{background:url("//upload.wikimedia.org/wikipedia/commons/6/65/Lock-green.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-limited.id-lock-limited a,.mw-parser-output .id-lock-registration.id-lock-registration a{background:url("//upload.wikimedia.org/wikipedia/commons/d/d6/Lock-gray-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-subscription.id-lock-subscription a{background:url("//upload.wikimedia.org/wikipedia/commons/a/aa/Lock-red-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .cs1-ws-icon a{background:url("//upload.wikimedia.org/wikipedia/commons/4/4c/Wikisource-logo.svg")right 0.1em center/12px no-repeat}body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-free a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-limited a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-registration a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-subscription a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .cs1-ws-icon a{background-size:contain;padding:0 1em 0 0}.mw-parser-output .cs1-code{color:inherit;background:inherit;border:none;padding:inherit}.mw-parser-output .cs1-hidden-error{display:none;color:var(--color-error,#d33)}.mw-parser-output .cs1-visible-error{color:var(--color-error,#d33)}.mw-parser-output .cs1-maint{display:none;color:#085;margin-left:0.3em}.mw-parser-output .cs1-kern-left{padding-left:0.2em}.mw-parser-output .cs1-kern-right{padding-right:0.2em}.mw-parser-output .citation .mw-selflink{font-weight:inherit}@media screen{.mw-parser-output .cs1-format{font-size:95%}html.skin-theme-clientpref-night .mw-parser-output .cs1-maint{color:#18911f}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .cs1-maint{color:#18911f}}</style><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://github.com/apache/groovy/releases/tag/GROOVY_4_0_24">"Release 4.0.24"</a>. 5 November 2024<span class="reference-accessdate">. Retrieved <span class="nowrap">22 November</span> 2024</span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=Release+4.0.24&rft.date=2024-11-05&rft_id=https%3A%2F%2Fgithub.com%2Fapache%2Fgroovy%2Freleases%2Ftag%2FGROOVY_4_0_24&rfr_id=info%3Asid%2Fen.wikipedia.org%3AApache+Groovy" class="Z3988"></span></span> </li> <li id="cite_note-github-releases-2"><span class="mw-cite-backlink"><b><a href="#cite_ref-github-releases_2-0">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://github.com/apache/groovy/releases">"Releases - apache/groovy"</a><span class="reference-accessdate">. Retrieved <span class="nowrap">2020-04-09</span></span> – via <a href="/wiki/GitHub" title="GitHub">GitHub</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=Releases+-+apache%2Fgroovy&rft_id=https%3A%2F%2Fgithub.com%2Fapache%2Fgroovy%2Freleases&rfr_id=info%3Asid%2Fen.wikipedia.org%3AApache+Groovy" class="Z3988"></span></span> </li> <li id="cite_note-Groovy_Goodness:_Default_Groovy_Script_File_Extensions-3"><span class="mw-cite-backlink"><b><a href="#cite_ref-Groovy_Goodness:_Default_Groovy_Script_File_Extensions_3-0">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://mrhaki.blogspot.com/2011/10/groovy-goodness-default-groovy-script.html">"Groovy Goodness: Default Groovy Script File Extensions"</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=Groovy+Goodness%3A+Default+Groovy+Script+File+Extensions&rft_id=https%3A%2F%2Fmrhaki.blogspot.com%2F2011%2F10%2Fgroovy-goodness-default-groovy-script.html&rfr_id=info%3Asid%2Fen.wikipedia.org%3AApache+Groovy" class="Z3988"></span></span> </li> <li id="cite_note-4"><span class="mw-cite-backlink"><b><a href="#cite_ref-4">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://objectscape.blogspot.com.br/2012/08/groovy-20-performance-compared-to-java.html">"Groovy 2.0 Performance compared to Java"</a>. 25 Aug 2012.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=Groovy+2.0+Performance+compared+to+Java&rft.date=2012-08-25&rft_id=http%3A%2F%2Fobjectscape.blogspot.com.br%2F2012%2F08%2Fgroovy-20-performance-compared-to-java.html&rfr_id=info%3Asid%2Fen.wikipedia.org%3AApache+Groovy" class="Z3988"></span></span> </li> <li id="cite_note-5"><span class="mw-cite-backlink"><b><a href="#cite_ref-5">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://web.archive.org/web/20121210210126/http://blog.evan-wong.com/2012/07/java-vs-groovy20-vs-scala-simple.html">"Java vs Groovy2.0 vs Scala Simple Performance Test"</a>. 10 Jul 2012. Archived from <a rel="nofollow" class="external text" href="http://blog.evan-wong.com/2012/07/java-vs-groovy20-vs-scala-simple.html">the original</a> on 10 December 2012<span class="reference-accessdate">. Retrieved <span class="nowrap">7 October</span> 2012</span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=Java+vs+Groovy2.0+vs+Scala+Simple+Performance+Test&rft.date=2012-07-10&rft_id=http%3A%2F%2Fblog.evan-wong.com%2F2012%2F07%2Fjava-vs-groovy20-vs-scala-simple.html&rfr_id=info%3Asid%2Fen.wikipedia.org%3AApache+Groovy" class="Z3988"></span></span> </li> <li id="cite_note-blog.pivotal.io-6"><span class="mw-cite-backlink">^ <a href="#cite_ref-blog.pivotal.io_6-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-blog.pivotal.io_6-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://blog.pivotal.io/pivotal/news-2/groovy-2-4-and-grails-3-0-to-be-last-major-releases-under-pivotal-sponsorship">"Groovy 2.4 And Grails 3.0 To Be Last Major Releases Under Pivotal Sponsorship"</a>. 19 Jan 2015.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=Groovy+2.4+And+Grails+3.0+To+Be+Last+Major+Releases+Under+Pivotal+Sponsorship&rft.date=2015-01-19&rft_id=http%3A%2F%2Fblog.pivotal.io%2Fpivotal%2Fnews-2%2Fgroovy-2-4-and-grails-3-0-to-be-last-major-releases-under-pivotal-sponsorship&rfr_id=info%3Asid%2Fen.wikipedia.org%3AApache+Groovy" class="Z3988"></span></span> </li> <li id="cite_note-Groovy_Incubator-7"><span class="mw-cite-backlink">^ <a href="#cite_ref-Groovy_Incubator_7-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-Groovy_Incubator_7-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://blogs.apache.org/foundation/entry/groovy_submitted_to_become_a">"Groovy joins Apache Incubator"</a>. 11 Mar 2015.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=Groovy+joins+Apache+Incubator&rft.date=2015-03-11&rft_id=https%3A%2F%2Fblogs.apache.org%2Ffoundation%2Fentry%2Fgroovy_submitted_to_become_a&rfr_id=info%3Asid%2Fen.wikipedia.org%3AApache+Groovy" class="Z3988"></span></span> </li> <li id="cite_note-8"><span class="mw-cite-backlink"><b><a href="#cite_ref-8">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFJames_Strachan2003" class="citation web cs1">James Strachan (29 Aug 2003). <a rel="nofollow" class="external text" href="https://web.archive.org/web/20030901064404/http://radio.weblogs.com/0112098/2003/08/29.html">"Groovy - the birth of a new dynamic language for the Java platform"</a>. Archived from <a rel="nofollow" class="external text" href="http://radio.weblogs.com/0112098/2003/08/29.html">the original</a> on 1 September 2003.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=Groovy+-+the+birth+of+a+new+dynamic+language+for+the+Java+platform&rft.date=2003-08-29&rft.au=James+Strachan&rft_id=http%3A%2F%2Fradio.weblogs.com%2F0112098%2F2003%2F08%2F29.html&rfr_id=info%3Asid%2Fen.wikipedia.org%3AApache+Groovy" class="Z3988"></span></span> </li> <li id="cite_note-JSR-9"><span class="mw-cite-backlink">^ <a href="#cite_ref-JSR_9-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-JSR_9-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://www.jcp.org/en/jsr/detail?id=241">"Java Community Process JSR 241"</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=Java+Community+Process+JSR+241&rft_id=http%3A%2F%2Fwww.jcp.org%2Fen%2Fjsr%2Fdetail%3Fid%3D241&rfr_id=info%3Asid%2Fen.wikipedia.org%3AApache+Groovy" class="Z3988"></span></span> </li> <li id="cite_note-10"><span class="mw-cite-backlink"><b><a href="#cite_ref-10">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://web.archive.org/web/20150513184206/http://docs.codehaus.org/display/GROOVY/2007/04/26/Groovy+wins+first+prize+at+JAX+2007+innovation+award">"Groovy wins first prize at JAX 2007 innovation award"</a>. 2007-04-26. Archived from <a rel="nofollow" class="external text" href="http://docs.codehaus.org/display/GROOVY/2007/04/26/Groovy+wins+first+prize+at+JAX+2007+innovation+award">the original</a> on 2015-05-13<span class="reference-accessdate">. Retrieved <span class="nowrap">2012-10-07</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=Groovy+wins+first+prize+at+JAX+2007+innovation+award&rft.date=2007-04-26&rft_id=http%3A%2F%2Fdocs.codehaus.org%2Fdisplay%2FGROOVY%2F2007%2F04%2F26%2FGroovy%2Bwins%2Bfirst%2Bprize%2Bat%2BJAX%2B2007%2Binnovation%2Baward&rfr_id=info%3Asid%2Fen.wikipedia.org%3AApache+Groovy" class="Z3988"></span></span> </li> <li id="cite_note-11"><span class="mw-cite-backlink"><b><a href="#cite_ref-11">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://web.archive.org/web/20110419130810/http://jax-award.de/jax_award08/proposal_view_de.php?id=240">"They say a lot can happen over a cup of coffee"</a>. Archived from <a rel="nofollow" class="external text" href="http://jax-award.de/jax_award08/proposal_view_de.php?id=240&show=more">the original</a> on 2011-04-19<span class="reference-accessdate">. Retrieved <span class="nowrap">2012-10-07</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=They+say+a+lot+can+happen+over+a+cup+of+coffee&rft_id=http%3A%2F%2Fjax-award.de%2Fjax_award08%2Fproposal_view_de.php%3Fid%3D240%26show%3Dmore&rfr_id=info%3Asid%2Fen.wikipedia.org%3AApache+Groovy" class="Z3988"></span></span> </li> <li id="cite_note-12"><span class="mw-cite-backlink"><b><a href="#cite_ref-12">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://www.indicthreads.com/2138/springsource-acquires-groovy-and-grails-company-g2one/">"SpringSource Acquires Groovy and Grails company (G2One)"</a>. 11 Nov 2008.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=SpringSource+Acquires+Groovy+and+Grails+company+%28G2One%29&rft.date=2008-11-11&rft_id=http%3A%2F%2Fwww.indicthreads.com%2F2138%2Fspringsource-acquires-groovy-and-grails-company-g2one%2F&rfr_id=info%3Asid%2Fen.wikipedia.org%3AApache+Groovy" class="Z3988"></span></span> </li> <li id="cite_note-13"><span class="mw-cite-backlink"><b><a href="#cite_ref-13">^</a></b></span> <span class="reference-text"> <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://techcrunch.com/2009/08/10/vmware-acquires-springsource/">"VMWare Acquires SpringSource"</a>. 10 Aug 2009.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=VMWare+Acquires+SpringSource&rft.date=2009-08-10&rft_id=https%3A%2F%2Ftechcrunch.com%2F2009%2F08%2F10%2Fvmware-acquires-springsource%2F&rfr_id=info%3Asid%2Fen.wikipedia.org%3AApache+Groovy" class="Z3988"></span></span> </li> <li id="cite_note-14"><span class="mw-cite-backlink"><b><a href="#cite_ref-14">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://twitter.com/jstrachan/status/784333918078169088">"Tweet from James Strachan"</a>. November 24, 2016<span class="reference-accessdate">. Retrieved <span class="nowrap">2016-11-24</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=Tweet+from+James+Strachan&rft.date=2016-11-24&rft_id=https%3A%2F%2Ftwitter.com%2Fjstrachan%2Fstatus%2F784333918078169088&rfr_id=info%3Asid%2Fen.wikipedia.org%3AApache+Groovy" class="Z3988"></span></span> </li> <li id="cite_note-15"><span class="mw-cite-backlink"><b><a href="#cite_ref-15">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://mail-archives.apache.org/mod_mbox/groovy-dev/201511.mbox/%3CCAEWfVJ%3DBz-tiTTYHiPc8vY26CopLm3pPy_LADvvFh4vjVs%3Dosw%40mail.gmail.com%3E">"Announcement on dev mailing list"</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=Announcement+on+dev+mailing+list&rft_id=http%3A%2F%2Fmail-archives.apache.org%2Fmod_mbox%2Fgroovy-dev%2F201511.mbox%2F%253CCAEWfVJ%253DBz-tiTTYHiPc8vY26CopLm3pPy_LADvvFh4vjVs%253Dosw%2540mail.gmail.com%253E&rfr_id=info%3Asid%2Fen.wikipedia.org%3AApache+Groovy" class="Z3988"></span></span> </li> <li id="cite_note-16"><span class="mw-cite-backlink"><b><a href="#cite_ref-16">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://github.com/apache/groovy/releases/tag/GROOVY_3_0_0">"Release GROOVY_3_0_0 · apache/groovy"</a>. <i>GitHub</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2024-03-27</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=unknown&rft.jtitle=GitHub&rft.atitle=Release+GROOVY_3_0_0+%C2%B7+apache%2Fgroovy&rft_id=https%3A%2F%2Fgithub.com%2Fapache%2Fgroovy%2Freleases%2Ftag%2FGROOVY_3_0_0&rfr_id=info%3Asid%2Fen.wikipedia.org%3AApache+Groovy" class="Z3988"></span></span> </li> <li id="cite_note-17"><span class="mw-cite-backlink"><b><a href="#cite_ref-17">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://github.com/apache/groovy/releases/tag/GROOVY_4_0_0">"Release GROOVY_4_0_0 · apache/groovy"</a>. <i>GitHub</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2024-03-27</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=unknown&rft.jtitle=GitHub&rft.atitle=Release+GROOVY_4_0_0+%C2%B7+apache%2Fgroovy&rft_id=https%3A%2F%2Fgithub.com%2Fapache%2Fgroovy%2Freleases%2Ftag%2FGROOVY_4_0_0&rfr_id=info%3Asid%2Fen.wikipedia.org%3AApache+Groovy" class="Z3988"></span></span> </li> <li id="cite_note-konig32-18"><span class="mw-cite-backlink"><b><a href="#cite_ref-konig32_18-0">^</a></b></span> <span class="reference-text">König 2007, pg. 32</span> </li> <li id="cite_note-19"><span class="mw-cite-backlink"><b><a href="#cite_ref-19">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://web.archive.org/web/20150117214709/http://groovy.codehaus.org/Groovy+style+and+language+feature+guidelines+for+Java+developers">"Groovy style and language feature guidelines for Java developers"</a>. Groovy.codehaus.org. Archived from <a rel="nofollow" class="external text" href="http://groovy.codehaus.org/Groovy+style+and+language+feature+guidelines+for+Java+developers">the original</a> on 2015-01-17<span class="reference-accessdate">. Retrieved <span class="nowrap">2015-01-22</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=Groovy+style+and+language+feature+guidelines+for+Java+developers&rft.pub=Groovy.codehaus.org&rft_id=http%3A%2F%2Fgroovy.codehaus.org%2FGroovy%2Bstyle%2Band%2Blanguage%2Bfeature%2Bguidelines%2Bfor%2BJava%2Bdevelopers&rfr_id=info%3Asid%2Fen.wikipedia.org%3AApache+Groovy" class="Z3988"></span></span> </li> <li id="cite_note-20"><span class="mw-cite-backlink"><b><a href="#cite_ref-20">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://web.archive.org/web/20090317025737/http://groovy.codehaus.org/Differences+from+Java">"Groovy – Differences from Java"</a>. Groovy.codehaus.org. Archived from <a rel="nofollow" class="external text" href="http://groovy.codehaus.org/Differences+from+Java">the original</a> on 2009-03-17<span class="reference-accessdate">. Retrieved <span class="nowrap">2013-08-12</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=Groovy+%E2%80%93+Differences+from+Java&rft.pub=Groovy.codehaus.org&rft_id=http%3A%2F%2Fgroovy.codehaus.org%2FDifferences%2Bfrom%2BJava&rfr_id=info%3Asid%2Fen.wikipedia.org%3AApache+Groovy" class="Z3988"></span></span> </li> <li id="cite_note-21"><span class="mw-cite-backlink"><b><a href="#cite_ref-21">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://www.infoq.com/articles/new-groovy-20">"What's new in Groovy 2.0?"</a>. 28 Jun 2012.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=What%27s+new+in+Groovy+2.0%3F&rft.date=2012-06-28&rft_id=http%3A%2F%2Fwww.infoq.com%2Farticles%2Fnew-groovy-20&rfr_id=info%3Asid%2Fen.wikipedia.org%3AApache+Groovy" class="Z3988"></span></span> </li> <li id="cite_note-konig37_8-22"><span class="mw-cite-backlink"><b><a href="#cite_ref-konig37_8_22-0">^</a></b></span> <span class="reference-text">König 2007, pp. 37-8</span> </li> <li id="cite_note-konig38_9-23"><span class="mw-cite-backlink"><b><a href="#cite_ref-konig38_9_23-0">^</a></b></span> <span class="reference-text">König 2007, pp. 38-9</span> </li> <li id="cite_note-konig41_3-24"><span class="mw-cite-backlink"><b><a href="#cite_ref-konig41_3_24-0">^</a></b></span> <span class="reference-text">König 2007, pp. 41-3</span> </li> <li id="cite_note-25"><span class="mw-cite-backlink"><b><a href="#cite_ref-25">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://web.archive.org/web/20121001122409/http://groovy.codehaus.org/JN3525-MetaClasses">"JN3525-MetaClasses"</a>. Archived from <a rel="nofollow" class="external text" href="http://groovy.codehaus.org/JN3525-MetaClasses">the original</a> on 2012-10-01<span class="reference-accessdate">. Retrieved <span class="nowrap">2012-10-07</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=JN3525-MetaClasses&rft_id=http%3A%2F%2Fgroovy.codehaus.org%2FJN3525-MetaClasses&rfr_id=info%3Asid%2Fen.wikipedia.org%3AApache+Groovy" class="Z3988"></span></span> </li> <li id="cite_note-26"><span class="mw-cite-backlink"><b><a href="#cite_ref-26">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://www.slideshare.net/zenMonkey/metaprogramming-techniques-in-groovy-and-grails">"Metaprogramming Techniques in Groovy and Grails"</a>. 11 Jun 2009.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=Metaprogramming+Techniques+in+Groovy+and+Grails&rft.date=2009-06-11&rft_id=http%3A%2F%2Fwww.slideshare.net%2FzenMonkey%2Fmetaprogramming-techniques-in-groovy-and-grails&rfr_id=info%3Asid%2Fen.wikipedia.org%3AApache+Groovy" class="Z3988"></span></span> </li> <li id="cite_note-27"><span class="mw-cite-backlink"><b><a href="#cite_ref-27">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://web.archive.org/web/20120522213410/http://groovy.codehaus.org/Closures">"Groovy - Closures"</a>. Archived from <a rel="nofollow" class="external text" href="http://groovy.codehaus.org/Closures">the original</a> on 2012-05-22.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=Groovy+-+Closures&rft_id=http%3A%2F%2Fgroovy.codehaus.org%2FClosures&rfr_id=info%3Asid%2Fen.wikipedia.org%3AApache+Groovy" class="Z3988"></span></span> </li> <li id="cite_note-:0-28"><span class="mw-cite-backlink">^ <a href="#cite_ref-:0_28-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-:0_28-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text"><a rel="nofollow" class="external text" href="http://programmers.stackexchange.com/questions/152868/does-groovy-call-partial-application-currying">"Does groovy call partial application 'currying'</a>", 10 Aug 2013</span> </li> <li id="cite_note-29"><span class="mw-cite-backlink"><b><a href="#cite_ref-29">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://web.archive.org/web/20121008091312/http://groovy.codehaus.org/Lazy+transformation">"Groovy - Lazy Transformation"</a>. Archived from <a rel="nofollow" class="external text" href="http://groovy.codehaus.org/Lazy+transformation">the original</a> on 2012-10-08<span class="reference-accessdate">. Retrieved <span class="nowrap">2012-10-07</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=Groovy+-+Lazy+Transformation&rft_id=http%3A%2F%2Fgroovy.codehaus.org%2FLazy%2Btransformation&rfr_id=info%3Asid%2Fen.wikipedia.org%3AApache+Groovy" class="Z3988"></span></span> </li> <li id="cite_note-30"><span class="mw-cite-backlink"><b><a href="#cite_ref-30">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://ndpar.blogspot.com.br/2011/02/lazy-lists-in-groovy.html">"Side Notes: Lazy lists in Groovy"</a>. 3 Feb 2011.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=Side+Notes%3A+Lazy+lists+in+Groovy&rft.date=2011-02-03&rft_id=http%3A%2F%2Fndpar.blogspot.com.br%2F2011%2F02%2Flazy-lists-in-groovy.html&rfr_id=info%3Asid%2Fen.wikipedia.org%3AApache+Groovy" class="Z3988"></span></span> </li> <li id="cite_note-31"><span class="mw-cite-backlink"><b><a href="#cite_ref-31">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://web.archive.org/web/20150213033355/http://bendoerr.me/posts/2011-06-20-groovy-inject.html">"Groovy's Fold"</a>. 20 Jun 2011. Archived from <a rel="nofollow" class="external text" href="http://bendoerr.me/posts/2011-06-20-groovy-inject.html">the original</a> on 13 February 2015<span class="reference-accessdate">. Retrieved <span class="nowrap">12 February</span> 2015</span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=Groovy%27s+Fold&rft.date=2011-06-20&rft_id=http%3A%2F%2Fbendoerr.me%2Fposts%2F2011-06-20-groovy-inject.html&rfr_id=info%3Asid%2Fen.wikipedia.org%3AApache+Groovy" class="Z3988"></span></span> </li> <li id="cite_note-32"><span class="mw-cite-backlink"><b><a href="#cite_ref-32">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://www.slideshare.net/arturoherrero/functional-programming-with-groovy">"Functional Programming with Groovy"</a>. 5 Nov 2011.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=Functional+Programming+with+Groovy&rft.date=2011-11-05&rft_id=http%3A%2F%2Fwww.slideshare.net%2Farturoherrero%2Ffunctional-programming-with-groovy&rfr_id=info%3Asid%2Fen.wikipedia.org%3AApache+Groovy" class="Z3988"></span></span> </li> <li id="cite_note-33"><span class="mw-cite-backlink"><b><a href="#cite_ref-33">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://web.archive.org/web/20121008095622/http://groovy.codehaus.org/Functional+Programming+with+Groovy">"Function programming in Groovy"</a>. Archived from <a rel="nofollow" class="external text" href="http://groovy.codehaus.org/Functional+Programming+with+Groovy">the original</a> on 2012-10-08<span class="reference-accessdate">. Retrieved <span class="nowrap">2012-10-07</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=Function+programming+in+Groovy&rft_id=http%3A%2F%2Fgroovy.codehaus.org%2FFunctional%2BProgramming%2Bwith%2BGroovy&rfr_id=info%3Asid%2Fen.wikipedia.org%3AApache+Groovy" class="Z3988"></span></span> </li> <li id="cite_note-34"><span class="mw-cite-backlink"><b><a href="#cite_ref-34">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://web.archive.org/web/20121002221510/http://groovy.codehaus.org/gapi/groovy/json/JsonBuilder.html">"JsonBuilder"</a>. Archived from <a rel="nofollow" class="external text" href="http://groovy.codehaus.org/gapi/groovy/json/JsonBuilder.html">the original</a> on 2012-10-02<span class="reference-accessdate">. Retrieved <span class="nowrap">2012-10-07</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=JsonBuilder&rft_id=http%3A%2F%2Fgroovy.codehaus.org%2Fgapi%2Fgroovy%2Fjson%2FJsonBuilder.html&rfr_id=info%3Asid%2Fen.wikipedia.org%3AApache+Groovy" class="Z3988"></span></span> </li> <li id="cite_note-35"><span class="mw-cite-backlink"><b><a href="#cite_ref-35">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://rajakannappan.blogspot.com.br/2009/12/groovy-strings-different-ways-of.html">"Groovy Strings - Different ways of creating them"</a>. 26 Dec 2009.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=Groovy+Strings+-+Different+ways+of+creating+them&rft.date=2009-12-26&rft_id=http%3A%2F%2Frajakannappan.blogspot.com.br%2F2009%2F12%2Fgroovy-strings-different-ways-of.html&rfr_id=info%3Asid%2Fen.wikipedia.org%3AApache+Groovy" class="Z3988"></span></span> </li> <li id="cite_note-36"><span class="mw-cite-backlink"><b><a href="#cite_ref-36">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://web.archive.org/web/20121014094900/http://groovy.codehaus.org/Compile-time+Metaprogramming+-+AST+Transformations">"Compile-time Metaprogramming - AST Transformations"</a>. Archived from <a rel="nofollow" class="external text" href="http://groovy.codehaus.org/Compile-time+Metaprogramming+-+AST+Transformations">the original</a> on 2012-10-14<span class="reference-accessdate">. Retrieved <span class="nowrap">2012-10-07</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=Compile-time+Metaprogramming+-+AST+Transformations&rft_id=http%3A%2F%2Fgroovy.codehaus.org%2FCompile-time%2BMetaprogramming%2B-%2BAST%2BTransformations&rfr_id=info%3Asid%2Fen.wikipedia.org%3AApache+Groovy" class="Z3988"></span></span> </li> <li id="cite_note-37"><span class="mw-cite-backlink"><b><a href="#cite_ref-37">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFKing2020" class="citation journal cs1">King, Paul (2020). <a rel="nofollow" class="external text" href="https://doi.org/10.1145%2F3386326">"A History of the Groovy Programming Language"</a>. <i>Proc. ACM Program. Lang</i>. <b>4</b>: 53. <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://doi.org/10.1145%2F3386326">10.1145/3386326</a></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=Proc.+ACM+Program.+Lang.&rft.atitle=A+History+of+the+Groovy+Programming+Language&rft.volume=4&rft.pages=53&rft.date=2020&rft_id=info%3Adoi%2F10.1145%2F3386326&rft.aulast=King&rft.aufirst=Paul&rft_id=https%3A%2F%2Fdoi.org%2F10.1145%252F3386326&rfr_id=info%3Asid%2Fen.wikipedia.org%3AApache+Groovy" class="Z3988"></span></span> </li> <li id="cite_note-38"><span class="mw-cite-backlink"><b><a href="#cite_ref-38">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://scriptrunner.adaptavist.com/latest/index.html">"ScriptRunner Documentation"</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=ScriptRunner+Documentation&rft_id=https%3A%2F%2Fscriptrunner.adaptavist.com%2Flatest%2Findex.html&rfr_id=info%3Asid%2Fen.wikipedia.org%3AApache+Groovy" class="Z3988"></span></span> </li> <li id="cite_note-39"><span class="mw-cite-backlink"><b><a href="#cite_ref-39">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://www.adaptavist.com/blog/adaptavist-completes-another-acquisition-against-a-backdrop-of-explosive-global-growth/">"ScriptRunner Press Release with adoption stats"</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=ScriptRunner+Press+Release+with+adoption+stats&rft_id=http%3A%2F%2Fwww.adaptavist.com%2Fblog%2Fadaptavist-completes-another-acquisition-against-a-backdrop-of-explosive-global-growth%2F&rfr_id=info%3Asid%2Fen.wikipedia.org%3AApache+Groovy" class="Z3988"></span></span> </li> <li id="cite_note-40"><span class="mw-cite-backlink"><b><a href="#cite_ref-40">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://cwiki.apache.org/confluence/display/OFBIZ/Groovy+DSL+for+OFBiz+business+logic">"Groovy DSL for OFBiz business logic"</a>. <i>Apache OFBiz Project Open Wiki</i>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=unknown&rft.jtitle=Apache+OFBiz+Project+Open+Wiki&rft.atitle=Groovy+DSL+for+OFBiz+business+logic&rft_id=https%3A%2F%2Fcwiki.apache.org%2Fconfluence%2Fdisplay%2FOFBIZ%2FGroovy%2BDSL%2Bfor%2BOFBiz%2Bbusiness%2Blogic&rfr_id=info%3Asid%2Fen.wikipedia.org%3AApache+Groovy" class="Z3988"></span></span> </li> <li id="cite_note-41"><span class="mw-cite-backlink"><b><a href="#cite_ref-41">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://cwiki.apache.org/confluence/display/OFBIZ/Simple-methods+examples+using+Groovy">"Simple-methods examples using Groovy"</a>. <i>Apache OFBiz Project Open Wiki</i>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=unknown&rft.jtitle=Apache+OFBiz+Project+Open+Wiki&rft.atitle=Simple-methods+examples+using+Groovy&rft_id=https%3A%2F%2Fcwiki.apache.org%2Fconfluence%2Fdisplay%2FOFBIZ%2FSimple-methods%2Bexamples%2Busing%2BGroovy&rfr_id=info%3Asid%2Fen.wikipedia.org%3AApache+Groovy" class="Z3988"></span></span> </li> <li id="cite_note-42"><span class="mw-cite-backlink"><b><a href="#cite_ref-42">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://blog.linkedin.com/2008/06/11/grails-at-linkedin/">"Grails at LinkedIn"</a><span class="reference-accessdate">. Retrieved <span class="nowrap">2015-06-02</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=Grails+at+LinkedIn&rft_id=http%3A%2F%2Fblog.linkedin.com%2F2008%2F06%2F11%2Fgrails-at-linkedin%2F&rfr_id=info%3Asid%2Fen.wikipedia.org%3AApache+Groovy" class="Z3988"></span></span> </li> <li id="cite_note-43"><span class="mw-cite-backlink"><b><a href="#cite_ref-43">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://www.logicmonitor.com/support/terminology-syntax/scripting-support/embedded-groovy-scripting">"Embedded Groovy Scripting"</a>. <i>www.logicmonitor.com</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2020-11-20</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=unknown&rft.jtitle=www.logicmonitor.com&rft.atitle=Embedded+Groovy+Scripting&rft_id=https%3A%2F%2Fwww.logicmonitor.com%2Fsupport%2Fterminology-syntax%2Fscripting-support%2Fembedded-groovy-scripting&rfr_id=info%3Asid%2Fen.wikipedia.org%3AApache+Groovy" class="Z3988"></span></span> </li> <li id="cite_note-44"><span class="mw-cite-backlink"><b><a href="#cite_ref-44">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://jenkins.io/doc/book/pipeline/overview/">"Jenkins Pipeline"</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=Jenkins+Pipeline&rft_id=https%3A%2F%2Fjenkins.io%2Fdoc%2Fbook%2Fpipeline%2Foverview%2F&rfr_id=info%3Asid%2Fen.wikipedia.org%3AApache+Groovy" class="Z3988"></span></span> </li> <li id="cite_note-45"><span class="mw-cite-backlink"><b><a href="#cite_ref-45">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFRocher2008" class="citation web cs1">Rocher, Graeme (October 2, 2008). <a rel="nofollow" class="external text" href="http://graemerocher.blogspot.com.br/2008/10/skycom-relaunches-written-in-grails.html">"Graeme Rocher's Blog: Sky.com relaunches written in Grails"</a>. <i>Graeme Rocher's Blog</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2015-06-02</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=unknown&rft.jtitle=Graeme+Rocher%27s+Blog&rft.atitle=Graeme+Rocher%27s+Blog%3A+Sky.com+relaunches+written+in+Grails&rft.date=2008-10-02&rft.aulast=Rocher&rft.aufirst=Graeme&rft_id=http%3A%2F%2Fgraemerocher.blogspot.com.br%2F2008%2F10%2Fskycom-relaunches-written-in-grails.html&rfr_id=info%3Asid%2Fen.wikipedia.org%3AApache+Groovy" class="Z3988"></span></span> </li> <li id="cite_note-46"><span class="mw-cite-backlink"><b><a href="#cite_ref-46">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="https://iotsecurity.eecs.umich.edu/img/Paper27_CameraReady_SmartThings_Revised_IEEEGen.pdf">Security Analysis of Emerging Smart Home Applications</a></span> </li> <li id="cite_note-47"><span class="mw-cite-backlink"><b><a href="#cite_ref-47">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://www.soapui.org/Scripting-Properties/scripting-and-the-script-library.html">"Scripting and the Script Library | Scripting & Properties"</a>. <i>www.soapui.org</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2015-06-02</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=unknown&rft.jtitle=www.soapui.org&rft.atitle=Scripting+and+the+Script+Library+%7C+Scripting+%26+Properties&rft_id=http%3A%2F%2Fwww.soapui.org%2FScripting-Properties%2Fscripting-and-the-script-library.html&rfr_id=info%3Asid%2Fen.wikipedia.org%3AApache+Groovy" class="Z3988"></span></span> </li> <li id="cite_note-48"><span class="mw-cite-backlink"><b><a href="#cite_ref-48">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://docs.jboss.org/seam/2.0.2.GA/reference/en-US/html/groovy.html">"Chapter 11. Groovy integration"</a>. <i>docs.jboss.org</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2015-06-02</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=unknown&rft.jtitle=docs.jboss.org&rft.atitle=Chapter+11.+Groovy+integration&rft_id=http%3A%2F%2Fdocs.jboss.org%2Fseam%2F2.0.2.GA%2Freference%2Fen-US%2Fhtml%2Fgroovy.html&rfr_id=info%3Asid%2Fen.wikipedia.org%3AApache+Groovy" class="Z3988"></span></span> </li> <li id="cite_note-49"><span class="mw-cite-backlink"><b><a href="#cite_ref-49">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://www.anu.ac.ke/1403/vcalc-the-first-ever-social-platform-for-the-world-of-math/">"vCalc, the First ever Social Platform for the world of Math"</a>. 4 November 2014<span class="reference-accessdate">. Retrieved <span class="nowrap">2016-05-05</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=vCalc%2C+the+First+ever+Social+Platform+for+the+world+of+Math&rft.date=2014-11-04&rft_id=http%3A%2F%2Fwww.anu.ac.ke%2F1403%2Fvcalc-the-first-ever-social-platform-for-the-world-of-math%2F&rfr_id=info%3Asid%2Fen.wikipedia.org%3AApache+Groovy" class="Z3988"></span></span> </li> <li id="cite_note-50"><span class="mw-cite-backlink"><b><a href="#cite_ref-50">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://www.springsource.org/files/uploads/all/pdf_files/customer/S2_CaseStudy_Wired_USLET_EN.pdf">"Wired.Com"</a> <span class="cs1-format">(PDF)</span>. <i>www.springsource.org</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2015-06-02</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=unknown&rft.jtitle=www.springsource.org&rft.atitle=Wired.Com&rft_id=http%3A%2F%2Fwww.springsource.org%2Ffiles%2Fuploads%2Fall%2Fpdf_files%2Fcustomer%2FS2_CaseStudy_Wired_USLET_EN.pdf&rfr_id=info%3Asid%2Fen.wikipedia.org%3AApache+Groovy" class="Z3988"></span></span> </li> <li id="cite_note-51"><span class="mw-cite-backlink"><b><a href="#cite_ref-51">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://www.springsource.org/files/uploads/all/pdf_files/customer/S2_CaseStudy_XWiki.pdf">"XWiki SAS"</a> <span class="cs1-format">(PDF)</span>. <i>www.springsource.org</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2015-06-02</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=unknown&rft.jtitle=www.springsource.org&rft.atitle=XWiki+SAS&rft_id=http%3A%2F%2Fwww.springsource.org%2Ffiles%2Fuploads%2Fall%2Fpdf_files%2Fcustomer%2FS2_CaseStudy_XWiki.pdf&rfr_id=info%3Asid%2Fen.wikipedia.org%3AApache+Groovy" class="Z3988"></span></span> </li> <li id="cite_note-52"><span class="mw-cite-backlink"><b><a href="#cite_ref-52">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://web.archive.org/web/20170628212516/http://grooscript.org/doc.html">"Grooscript Documentation"</a>. 12 Sep 2016. Archived from <a rel="nofollow" class="external text" href="http://grooscript.org/doc.html">the original</a> on 28 June 2017<span class="reference-accessdate">. Retrieved <span class="nowrap">4 July</span> 2017</span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=Grooscript+Documentation&rft.date=2016-09-12&rft_id=http%3A%2F%2Fgrooscript.org%2Fdoc.html&rfr_id=info%3Asid%2Fen.wikipedia.org%3AApache+Groovy" class="Z3988"></span></span> </li> <li id="cite_note-53"><span class="mw-cite-backlink"><b><a href="#cite_ref-53">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://www.infoq.com/presentations/grooscript">"Presentation at SpringOne/2GX on Grooscript"</a>. 13 Dec 2015.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=Presentation+at+SpringOne%2F2GX+on+Grooscript&rft.date=2015-12-13&rft_id=https%3A%2F%2Fwww.infoq.com%2Fpresentations%2Fgrooscript&rfr_id=info%3Asid%2Fen.wikipedia.org%3AApache+Groovy" class="Z3988"></span></span> </li> <li id="cite_note-54"><span class="mw-cite-backlink"><b><a href="#cite_ref-54">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://web.archive.org/web/20170709170154/http://grooscript.org/conversions.html">"Grooscript online conversions"</a>. 15 May 2017. Archived from <a rel="nofollow" class="external text" href="http://grooscript.org/conversions.html">the original</a> on 9 July 2017<span class="reference-accessdate">. Retrieved <span class="nowrap">4 July</span> 2017</span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=Grooscript+online+conversions&rft.date=2017-05-15&rft_id=http%3A%2F%2Fgrooscript.org%2Fconversions.html&rfr_id=info%3Asid%2Fen.wikipedia.org%3AApache+Groovy" class="Z3988"></span></span> </li> </ol></div> <div class="mw-heading mw-heading3"><h3 id="Sources">Sources</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Apache_Groovy&action=edit&section=19" title="Edit section: Sources"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <style data-mw-deduplicate="TemplateStyles:r1239549316">.mw-parser-output .refbegin{margin-bottom:0.5em}.mw-parser-output .refbegin-hanging-indents>ul{margin-left:0}.mw-parser-output .refbegin-hanging-indents>ul>li{margin-left:0;padding-left:3.2em;text-indent:-3.2em}.mw-parser-output .refbegin-hanging-indents ul,.mw-parser-output .refbegin-hanging-indents ul li{list-style:none}@media(max-width:720px){.mw-parser-output .refbegin-hanging-indents>ul>li{padding-left:1.6em;text-indent:-1.6em}}.mw-parser-output .refbegin-columns{margin-top:0.3em}.mw-parser-output .refbegin-columns ul{margin-top:0}.mw-parser-output .refbegin-columns li{page-break-inside:avoid;break-inside:avoid-column}@media screen{.mw-parser-output .refbegin{font-size:90%}}</style><div class="refbegin" style=""> <ul><li><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFKönigPaul_KingGuillaume_LaforgeHamlet_D'Arcy2015" class="citation book cs1">König, Dierk; Paul King; Guillaume Laforge; Hamlet D'Arcy; Cédric Champeau; Erik Pragt; Jon Skeet (2015). <i>Groovy in Action, Second Edition</i>. Manning. <a href="/wiki/ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <a href="/wiki/Special:BookSources/978-1-935182-44-3" title="Special:BookSources/978-1-935182-44-3"><bdi>978-1-935182-44-3</bdi></a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=book&rft.btitle=Groovy+in+Action%2C+Second+Edition&rft.pub=Manning&rft.date=2015&rft.isbn=978-1-935182-44-3&rft.aulast=K%C3%B6nig&rft.aufirst=Dierk&rft.au=Paul+King&rft.au=Guillaume+Laforge&rft.au=Hamlet+D%27Arcy&rft.au=C%C3%A9dric+Champeau&rft.au=Erik+Pragt&rft.au=Jon+Skeet&rfr_id=info%3Asid%2Fen.wikipedia.org%3AApache+Groovy" class="Z3988"></span></li> <li><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFBarclayJohn_Savage2007" class="citation book cs1">Barclay, Kenneth; John Savage (2007). <a rel="nofollow" class="external text" href="https://web.archive.org/web/20100112040339/http://www.elsevier.com/wps/find/bookdescription.cws_home/709814/description#description"><i>Groovy Programming: An Introduction for Java Developers</i></a>. Morgan Kaufmann Publishers. <a href="/wiki/ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <a href="/wiki/Special:BookSources/978-0-12-372507-3" title="Special:BookSources/978-0-12-372507-3"><bdi>978-0-12-372507-3</bdi></a>. Archived from <a rel="nofollow" class="external text" href="http://www.elsevier.com/wps/find/bookdescription.cws_home/709814/description#description">the original</a> on 2010-01-12<span class="reference-accessdate">. Retrieved <span class="nowrap">2007-07-19</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=book&rft.btitle=Groovy+Programming%3A+An+Introduction+for+Java+Developers&rft.pub=Morgan+Kaufmann+Publishers&rft.date=2007&rft.isbn=978-0-12-372507-3&rft.aulast=Barclay&rft.aufirst=Kenneth&rft.au=John+Savage&rft_id=http%3A%2F%2Fwww.elsevier.com%2Fwps%2Ffind%2Fbookdescription.cws_home%2F709814%2Fdescription%23description&rfr_id=info%3Asid%2Fen.wikipedia.org%3AApache+Groovy" class="Z3988"></span></li> <li><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFDavis2008" class="citation book cs1">Davis, Scott (2008). <a rel="nofollow" class="external text" href="https://archive.org/details/isbn_9780978739294"><i>Groovy Recipes: Greasing the Wheels of Java</i></a>. Pragmatic Bookshelf. <a href="/wiki/ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <a href="/wiki/Special:BookSources/978-0-9787392-9-4" title="Special:BookSources/978-0-9787392-9-4"><bdi>978-0-9787392-9-4</bdi></a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=book&rft.btitle=Groovy+Recipes%3A+Greasing+the+Wheels+of+Java&rft.pub=Pragmatic+Bookshelf&rft.date=2008&rft.isbn=978-0-9787392-9-4&rft.aulast=Davis&rft.aufirst=Scott&rft_id=https%3A%2F%2Farchive.org%2Fdetails%2Fisbn_9780978739294&rfr_id=info%3Asid%2Fen.wikipedia.org%3AApache+Groovy" class="Z3988"></span></li> <li><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFSubramaniam2008" class="citation book cs1">Subramaniam, Venkat (2008). <a rel="nofollow" class="external text" href="https://archive.org/details/programminggroov0000subr"><i>Programming Groovy: Dynamic Productivity for the Java Developer</i></a>. Pragmatic Bookshelf. <a href="/wiki/ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <a href="/wiki/Special:BookSources/978-1-934356-09-8" title="Special:BookSources/978-1-934356-09-8"><bdi>978-1-934356-09-8</bdi></a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=book&rft.btitle=Programming+Groovy%3A+Dynamic+Productivity+for+the+Java+Developer&rft.pub=Pragmatic+Bookshelf&rft.date=2008&rft.isbn=978-1-934356-09-8&rft.aulast=Subramaniam&rft.aufirst=Venkat&rft_id=https%3A%2F%2Farchive.org%2Fdetails%2Fprogramminggroov0000subr&rfr_id=info%3Asid%2Fen.wikipedia.org%3AApache+Groovy" class="Z3988"></span></li></ul> </div> <div class="mw-heading mw-heading2"><h2 id="External_links">External links</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Apache_Groovy&action=edit&section=20" title="Edit section: External links"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <ul><li><span class="official-website"><span class="url"><a rel="nofollow" class="external text" href="https://groovy-lang.org">Official website</a></span></span> <span class="mw-valign-text-top" typeof="mw:File/Frameless"><a href="https://www.wikidata.org/wiki/Q504453#P856" title="Edit this at Wikidata"><img alt="Edit this at Wikidata" src="//upload.wikimedia.org/wikipedia/en/thumb/8/8a/OOjs_UI_icon_edit-ltr-progressive.svg/10px-OOjs_UI_icon_edit-ltr-progressive.svg.png" decoding="async" width="10" height="10" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/en/thumb/8/8a/OOjs_UI_icon_edit-ltr-progressive.svg/15px-OOjs_UI_icon_edit-ltr-progressive.svg.png 1.5x, //upload.wikimedia.org/wikipedia/en/thumb/8/8a/OOjs_UI_icon_edit-ltr-progressive.svg/20px-OOjs_UI_icon_edit-ltr-progressive.svg.png 2x" data-file-width="20" data-file-height="20" /></a></span></li></ul> <div class="navbox-styles"><style data-mw-deduplicate="TemplateStyles:r1129693374">.mw-parser-output .hlist dl,.mw-parser-output .hlist ol,.mw-parser-output .hlist ul{margin:0;padding:0}.mw-parser-output .hlist dd,.mw-parser-output .hlist dt,.mw-parser-output .hlist li{margin:0;display:inline}.mw-parser-output .hlist.inline,.mw-parser-output .hlist.inline dl,.mw-parser-output .hlist.inline ol,.mw-parser-output .hlist.inline ul,.mw-parser-output .hlist dl dl,.mw-parser-output .hlist dl ol,.mw-parser-output .hlist dl ul,.mw-parser-output .hlist ol dl,.mw-parser-output .hlist ol ol,.mw-parser-output .hlist ol ul,.mw-parser-output .hlist ul dl,.mw-parser-output .hlist ul ol,.mw-parser-output .hlist ul ul{display:inline}.mw-parser-output .hlist .mw-empty-li{display:none}.mw-parser-output .hlist dt::after{content:": "}.mw-parser-output .hlist dd::after,.mw-parser-output .hlist li::after{content:" · ";font-weight:bold}.mw-parser-output .hlist dd:last-child::after,.mw-parser-output .hlist dt:last-child::after,.mw-parser-output .hlist li:last-child::after{content:none}.mw-parser-output .hlist dd dd:first-child::before,.mw-parser-output .hlist dd dt:first-child::before,.mw-parser-output .hlist dd li:first-child::before,.mw-parser-output .hlist dt dd:first-child::before,.mw-parser-output .hlist dt dt:first-child::before,.mw-parser-output .hlist dt li:first-child::before,.mw-parser-output .hlist li dd:first-child::before,.mw-parser-output .hlist li dt:first-child::before,.mw-parser-output .hlist li li:first-child::before{content:" (";font-weight:normal}.mw-parser-output .hlist dd dd:last-child::after,.mw-parser-output .hlist dd dt:last-child::after,.mw-parser-output .hlist dd li:last-child::after,.mw-parser-output .hlist dt dd:last-child::after,.mw-parser-output .hlist dt dt:last-child::after,.mw-parser-output .hlist dt li:last-child::after,.mw-parser-output .hlist li dd:last-child::after,.mw-parser-output .hlist li dt:last-child::after,.mw-parser-output .hlist li li:last-child::after{content:")";font-weight:normal}.mw-parser-output .hlist ol{counter-reset:listitem}.mw-parser-output .hlist ol>li{counter-increment:listitem}.mw-parser-output .hlist ol>li::before{content:" "counter(listitem)"\a0 "}.mw-parser-output .hlist dd ol>li:first-child::before,.mw-parser-output .hlist dt ol>li:first-child::before,.mw-parser-output .hlist li ol>li:first-child::before{content:" ("counter(listitem)"\a0 "}</style><style data-mw-deduplicate="TemplateStyles:r1236075235">.mw-parser-output .navbox{box-sizing:border-box;border:1px solid #a2a9b1;width:100%;clear:both;font-size:88%;text-align:center;padding:1px;margin:1em auto 0}.mw-parser-output .navbox .navbox{margin-top:0}.mw-parser-output .navbox+.navbox,.mw-parser-output .navbox+.navbox-styles+.navbox{margin-top:-1px}.mw-parser-output .navbox-inner,.mw-parser-output .navbox-subgroup{width:100%}.mw-parser-output .navbox-group,.mw-parser-output .navbox-title,.mw-parser-output .navbox-abovebelow{padding:0.25em 1em;line-height:1.5em;text-align:center}.mw-parser-output .navbox-group{white-space:nowrap;text-align:right}.mw-parser-output .navbox,.mw-parser-output .navbox-subgroup{background-color:#fdfdfd}.mw-parser-output .navbox-list{line-height:1.5em;border-color:#fdfdfd}.mw-parser-output .navbox-list-with-group{text-align:left;border-left-width:2px;border-left-style:solid}.mw-parser-output tr+tr>.navbox-abovebelow,.mw-parser-output tr+tr>.navbox-group,.mw-parser-output tr+tr>.navbox-image,.mw-parser-output tr+tr>.navbox-list{border-top:2px solid #fdfdfd}.mw-parser-output .navbox-title{background-color:#ccf}.mw-parser-output .navbox-abovebelow,.mw-parser-output .navbox-group,.mw-parser-output .navbox-subgroup .navbox-title{background-color:#ddf}.mw-parser-output .navbox-subgroup .navbox-group,.mw-parser-output .navbox-subgroup .navbox-abovebelow{background-color:#e6e6ff}.mw-parser-output .navbox-even{background-color:#f7f7f7}.mw-parser-output .navbox-odd{background-color:transparent}.mw-parser-output .navbox .hlist td dl,.mw-parser-output .navbox .hlist td ol,.mw-parser-output .navbox .hlist td ul,.mw-parser-output .navbox td.hlist dl,.mw-parser-output .navbox td.hlist ol,.mw-parser-output .navbox td.hlist ul{padding:0.125em 0}.mw-parser-output .navbox .navbar{display:block;font-size:100%}.mw-parser-output .navbox-title .navbar{float:left;text-align:left;margin-right:0.5em}body.skin--responsive .mw-parser-output .navbox-image img{max-width:none!important}@media print{body.ns-0 .mw-parser-output .navbox{display:none!important}}</style></div><div role="navigation" class="navbox" aria-labelledby="The_Apache_Software_Foundation" style="padding:3px"><table class="nowraplinks hlist mw-collapsible autocollapse navbox-inner" style="border-spacing:0;background:transparent;color:inherit"><tbody><tr><th scope="col" class="navbox-title" colspan="2"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1129693374"><style data-mw-deduplicate="TemplateStyles:r1239400231">.mw-parser-output .navbar{display:inline;font-size:88%;font-weight:normal}.mw-parser-output .navbar-collapse{float:left;text-align:left}.mw-parser-output .navbar-boxtext{word-spacing:0}.mw-parser-output .navbar ul{display:inline-block;white-space:nowrap;line-height:inherit}.mw-parser-output .navbar-brackets::before{margin-right:-0.125em;content:"[ "}.mw-parser-output .navbar-brackets::after{margin-left:-0.125em;content:" ]"}.mw-parser-output .navbar li{word-spacing:-0.125em}.mw-parser-output .navbar a>span,.mw-parser-output .navbar a>abbr{text-decoration:inherit}.mw-parser-output .navbar-mini abbr{font-variant:small-caps;border-bottom:none;text-decoration:none;cursor:inherit}.mw-parser-output .navbar-ct-full{font-size:114%;margin:0 7em}.mw-parser-output .navbar-ct-mini{font-size:114%;margin:0 4em}html.skin-theme-clientpref-night .mw-parser-output .navbar li a abbr{color:var(--color-base)!important}@media(prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .navbar li a abbr{color:var(--color-base)!important}}@media print{.mw-parser-output .navbar{display:none!important}}</style><div class="navbar plainlinks hlist navbar-mini"><ul><li class="nv-view"><a href="/wiki/Template:Apache_Software_Foundation" title="Template:Apache Software Foundation"><abbr title="View this template">v</abbr></a></li><li class="nv-talk"><a href="/wiki/Template_talk:Apache_Software_Foundation" title="Template talk:Apache Software Foundation"><abbr title="Discuss this template">t</abbr></a></li><li class="nv-edit"><a href="/wiki/Special:EditPage/Template:Apache_Software_Foundation" title="Special:EditPage/Template:Apache Software Foundation"><abbr title="Edit this template">e</abbr></a></li></ul></div><div id="The_Apache_Software_Foundation" style="font-size:114%;margin:0 4em"><a href="/wiki/The_Apache_Software_Foundation" title="The Apache Software Foundation">The Apache Software Foundation</a></div></th></tr><tr><th scope="row" class="navbox-group" style="width:1%">Top-level<br />projects</th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/Apache_Accumulo" title="Apache Accumulo">Accumulo</a></li> <li><a href="/wiki/Apache_ActiveMQ" title="Apache ActiveMQ">ActiveMQ</a></li> <li><a href="/wiki/Apache_Airavata" title="Apache Airavata">Airavata</a></li> <li><a href="/wiki/Apache_Airflow" title="Apache Airflow">Airflow</a></li> <li><a href="/wiki/Apache_Allura" title="Apache Allura">Allura</a></li> <li><a href="/wiki/Apache_Ambari" class="mw-redirect" title="Apache Ambari">Ambari</a></li> <li><a href="/wiki/Apache_Ant" title="Apache Ant">Ant</a></li> <li><a href="/wiki/Apache_Aries" title="Apache Aries">Aries</a></li> <li><a href="/wiki/Apache_Arrow" title="Apache Arrow">Arrow</a></li> <li><a href="/wiki/Apache_HTTP_Server" title="Apache HTTP Server">Apache HTTP Server</a></li> <li><a href="/wiki/Apache_Portable_Runtime" title="Apache Portable Runtime">APR</a></li> <li><a href="/wiki/Apache_Avro" title="Apache Avro">Avro</a></li> <li><a href="/wiki/Apache_Axis" title="Apache Axis">Axis</a></li> <li><a href="/wiki/Apache_Axis2" title="Apache Axis2">Axis2</a></li> <li><a href="/wiki/Apache_Beam" title="Apache Beam">Beam</a></li> <li><a href="/wiki/Apache_Bloodhound" class="mw-redirect" title="Apache Bloodhound">Bloodhound</a></li> <li><a href="/wiki/Apache_Brooklyn" title="Apache Brooklyn">Brooklyn</a></li> <li><a href="/wiki/Apache_Calcite" title="Apache Calcite">Calcite</a></li> <li><a href="/wiki/Apache_Camel" title="Apache Camel">Camel</a></li> <li><a href="/wiki/Apache_CarbonData" title="Apache CarbonData">CarbonData</a></li> <li><a href="/wiki/Apache_Cassandra" title="Apache Cassandra">Cassandra</a></li> <li><a href="/wiki/Apache_Cayenne" title="Apache Cayenne">Cayenne</a></li> <li><a href="/wiki/Apache_CloudStack" title="Apache CloudStack">CloudStack</a></li> <li><a href="/wiki/Apache_Cocoon" title="Apache Cocoon">Cocoon</a></li> <li><a href="/wiki/Apache_Cordova" title="Apache Cordova">Cordova</a></li> <li><a href="/wiki/Apache_CouchDB" title="Apache CouchDB">CouchDB</a></li> <li><a href="/wiki/Apache_cTAKES" title="Apache cTAKES">cTAKES</a></li> <li><a href="/wiki/Apache_CXF" title="Apache CXF">CXF</a></li> <li><a href="/wiki/Apache_Derby" title="Apache Derby">Derby</a></li> <li><a href="/wiki/Apache_Directory" title="Apache Directory">Directory</a></li> <li><a href="/wiki/Apache_Drill" title="Apache Drill">Drill</a></li> <li><a href="/wiki/Apache_Druid" title="Apache Druid">Druid</a></li> <li><a href="/wiki/Apache_Empire-db" title="Apache Empire-db">Empire-db</a></li> <li><a href="/wiki/Apache_Felix" title="Apache Felix">Felix</a></li> <li><a href="/wiki/Apache_Flex" title="Apache Flex">Flex</a></li> <li><a href="/wiki/Apache_Flink" title="Apache Flink">Flink</a></li> <li><a href="/wiki/Apache_Flume" class="mw-redirect" title="Apache Flume">Flume</a></li> <li><a href="/wiki/FreeMarker" title="FreeMarker">FreeMarker</a></li> <li><a href="/wiki/Apache_Geronimo" title="Apache Geronimo">Geronimo</a></li> <li><a class="mw-selflink selflink">Groovy</a></li> <li><a href="/wiki/Apache_Guacamole" title="Apache Guacamole">Guacamole</a></li> <li><a href="/wiki/Apache_Gump" title="Apache Gump">Gump</a></li> <li><a href="/wiki/Apache_Hadoop" title="Apache Hadoop">Hadoop</a></li> <li><a href="/wiki/Apache_HBase" title="Apache HBase">HBase</a></li> <li><a href="/wiki/Apache_Helix" title="Apache Helix">Helix</a></li> <li><a href="/wiki/Apache_Hive" title="Apache Hive">Hive</a></li> <li><a href="/wiki/Apache_Iceberg" title="Apache Iceberg">Iceberg</a></li> <li><a href="/wiki/Apache_Ignite" title="Apache Ignite">Ignite</a></li> <li><a href="/wiki/Apache_Impala" title="Apache Impala">Impala</a></li> <li><a href="/wiki/Apache_Jackrabbit" title="Apache Jackrabbit">Jackrabbit</a></li> <li><a href="/wiki/Apache_James" title="Apache James">James</a></li> <li><a href="/wiki/Apache_Jena" title="Apache Jena">Jena</a></li> <li><a href="/wiki/Apache_JMeter" title="Apache JMeter">JMeter</a></li> <li><a href="/wiki/Apache_Kafka" title="Apache Kafka">Kafka</a></li> <li><a href="/wiki/Apache_Kudu" title="Apache Kudu">Kudu</a></li> <li><a href="/wiki/Apache_Kylin" title="Apache Kylin">Kylin</a></li> <li><a href="/wiki/Apache_Lucene" title="Apache Lucene">Lucene</a></li> <li><a href="/wiki/Apache_Mahout" title="Apache Mahout">Mahout</a></li> <li><a href="/wiki/Apache_Maven" title="Apache Maven">Maven</a></li> <li><a href="/wiki/Apache_MINA" title="Apache MINA">MINA</a></li> <li><a href="/wiki/Mod_perl" title="Mod perl">mod_perl</a></li> <li><a href="/wiki/Apache_MyFaces" title="Apache MyFaces">MyFaces</a></li> <li><a href="/wiki/Apache_Mynewt" title="Apache Mynewt">Mynewt</a></li> <li><a href="/wiki/Apache_NiFi" title="Apache NiFi">NiFi</a></li> <li><a href="/wiki/NetBeans" title="NetBeans">NetBeans</a></li> <li><a href="/wiki/Apache_Nutch" title="Apache Nutch">Nutch</a></li> <li><a href="/wiki/NuttX" title="NuttX">NuttX</a></li> <li><a href="/wiki/Apache_OFBiz" title="Apache OFBiz">OFBiz</a></li> <li><a href="/wiki/Apache_Oozie" title="Apache Oozie">Oozie</a></li> <li><a href="/wiki/Apache_OpenEJB" title="Apache OpenEJB">OpenEJB</a></li> <li><a href="/wiki/Apache_OpenJPA" title="Apache OpenJPA">OpenJPA</a></li> <li><a href="/wiki/Apache_OpenNLP" title="Apache OpenNLP">OpenNLP</a></li> <li><a href="/wiki/Apache_OpenOffice" title="Apache OpenOffice">OрenOffice</a></li> <li><a href="/wiki/Apache_ORC" title="Apache ORC">ORC</a></li> <li><a href="/wiki/Apache_PDFBox" title="Apache PDFBox">PDFBox</a></li> <li><a href="/wiki/Apache_Parquet" title="Apache Parquet">Parquet</a></li> <li><a href="/wiki/Apache_Phoenix" title="Apache Phoenix">Phoenix</a></li> <li><a href="/wiki/Apache_POI" title="Apache POI">POI</a></li> <li><a href="/wiki/Apache_Pig" title="Apache Pig">Pig</a></li> <li><a href="/wiki/Apache_Pinot" title="Apache Pinot">Pinot</a></li> <li><a href="/wiki/Apache_Pivot" title="Apache Pivot">Pivot</a></li> <li><a href="/wiki/Apache_Qpid" title="Apache Qpid">Qpid</a></li> <li><a href="/wiki/Apache_Roller" title="Apache Roller">Roller</a></li> <li><a href="/wiki/Apache_RocketMQ" title="Apache RocketMQ">RocketMQ</a></li> <li><a href="/wiki/Apache_Samza" title="Apache Samza">Samza</a></li> <li><a href="/wiki/Apache_Shiro" title="Apache Shiro">Shiro</a></li> <li><a href="/wiki/Apache_SINGA" title="Apache SINGA">SINGA</a></li> <li><a href="/wiki/Apache_Sling" title="Apache Sling">Sling</a></li> <li><a href="/wiki/Apache_Solr" title="Apache Solr">Solr</a></li> <li><a href="/wiki/Apache_Spark" title="Apache Spark">Spark</a></li> <li><a href="/wiki/Apache_Storm" title="Apache Storm">Storm</a></li> <li><a href="/wiki/Apache_SpamAssassin" title="Apache SpamAssassin">SpamAssassin</a></li> <li><a href="/wiki/Apache_Struts_1" title="Apache Struts 1">Struts 1</a></li> <li><a href="/wiki/Apache_Struts" title="Apache Struts">Struts 2</a></li> <li><a href="/wiki/Apache_Subversion" title="Apache Subversion">Subversion</a></li> <li><a href="/wiki/Apache_Superset" title="Apache Superset">Superset</a></li> <li><a href="/wiki/Apache_SystemDS" title="Apache SystemDS">SystemDS</a></li> <li><a href="/wiki/Apache_Tapestry" title="Apache Tapestry">Tapestry</a></li> <li><a href="/wiki/Apache_Thrift" title="Apache Thrift">Thrift</a></li> <li><a href="/wiki/Apache_Tika" title="Apache Tika">Tika</a></li> <li><a href="/wiki/Apache_TinkerPop" class="mw-redirect" title="Apache TinkerPop">TinkerPop</a></li> <li><a href="/wiki/Apache_Tomcat" title="Apache Tomcat">Tomcat</a></li> <li><a href="/wiki/Apache_Trafodion" class="mw-redirect" title="Apache Trafodion">Trafodion</a></li> <li><a href="/wiki/Apache_Traffic_Server" title="Apache Traffic Server">Traffic Server</a></li> <li><a href="/wiki/UIMA" title="UIMA">UIMA</a></li> <li><a href="/wiki/Apache_Velocity" title="Apache Velocity">Velocity</a></li> <li><a href="/wiki/Apache_Wicket" title="Apache Wicket">Wicket</a></li> <li><a href="/wiki/Apache_Xalan" title="Apache Xalan">Xalan</a></li> <li><a href="/wiki/Apache_Xerces" title="Apache Xerces">Xerces</a></li> <li><a href="/wiki/Apache_XMLBeans" title="Apache XMLBeans">XMLBeans</a></li> <li>Yetus</li> <li><a href="/wiki/Apache_ZooKeeper" title="Apache ZooKeeper">ZooKeeper</a></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="/wiki/Apache_Commons" title="Apache Commons">Commons</a></th><td class="navbox-list-with-group navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/Byte_Code_Engineering_Library" title="Byte Code Engineering Library">BCEL</a></li> <li><a href="/wiki/Bean_Scripting_Framework" title="Bean Scripting Framework">BSF</a></li> <li><a href="/wiki/Commons_Daemon" title="Commons Daemon">Daemon</a></li> <li><a href="/wiki/Apache_Jelly" title="Apache Jelly">Jelly</a></li> <li><a href="/wiki/Apache_Commons_Logging" title="Apache Commons Logging">Logging</a></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Incubator</th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/Apache_Taverna" title="Apache Taverna">Taverna</a></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Other projects</th><td class="navbox-list-with-group navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/Apache_Batik" title="Apache Batik">Batik</a></li> <li><a href="/wiki/Apache_FOP_(Formatting_Objects_Processor)" class="mw-redirect" title="Apache FOP (Formatting Objects Processor)">FOP</a></li> <li><a href="/wiki/Apache_Ivy" title="Apache Ivy">Ivy</a></li> <li><a href="/wiki/Log4j" title="Log4j">Log4j</a></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Attic</th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/Apache_Apex" title="Apache Apex">Apex</a></li> <li><a href="/wiki/AxKit" title="AxKit">AxKit</a></li> <li><a href="/wiki/Apache_Beehive" title="Apache Beehive">Beehive</a></li> <li><a href="/wiki/Apache_iBATIS" title="Apache iBATIS">iBATIS</a></li> <li><a href="/wiki/Apache_Click" title="Apache Click">Click</a></li> <li><a href="/wiki/Apache_Continuum" title="Apache Continuum">Continuum</a></li> <li><a href="/wiki/Deltacloud" title="Deltacloud">Deltacloud</a></li> <li><a href="/wiki/Etch_(protocol)" title="Etch (protocol)">Etch</a></li> <li><a href="/wiki/Apache_Giraph" title="Apache Giraph">Giraph</a></li> <li><a href="/wiki/Apache_Hama" title="Apache Hama">Hama</a></li> <li><a href="/wiki/Apache_Harmony" title="Apache Harmony">Harmony</a></li> <li><a href="/wiki/Jakarta_Project" title="Jakarta Project">Jakarta</a></li> <li><a href="/wiki/Apache_Marmotta" title="Apache Marmotta">Marmotta</a></li> <li><a href="/wiki/Apache_MXNet" title="Apache MXNet">MXNet</a></li> <li><a href="/wiki/Apache_ODE" title="Apache ODE">ODE</a></li> <li><a href="/wiki/Jini" title="Jini">River</a></li> <li><a href="/wiki/Apache_Shale" title="Apache Shale">Shale</a></li> <li><a href="/wiki/Jakarta_Slide" class="mw-redirect" title="Jakarta Slide">Slide</a></li> <li><a href="/wiki/Sqoop" title="Sqoop">Sqoop</a></li> <li><a href="/wiki/Apache_Stanbol" title="Apache Stanbol">Stanbol</a></li> <li><a href="/wiki/Apache_Tuscany" class="mw-redirect" title="Apache Tuscany">Tuscany</a></li> <li><a href="/wiki/Apache_Wave" class="mw-redirect" title="Apache Wave">Wave</a></li> <li><a href="/wiki/Apache_XML" title="Apache XML">XML</a></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Licenses</th><td class="navbox-list-with-group navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/Apache_License" title="Apache License">Apache License</a></li></ul> </div></td></tr><tr><td class="navbox-abovebelow" colspan="2"><div> <ul><li><span class="noviewer" typeof="mw:File"><span title="Category"><img alt="" src="//upload.wikimedia.org/wikipedia/en/thumb/9/96/Symbol_category_class.svg/16px-Symbol_category_class.svg.png" decoding="async" width="16" height="16" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/en/thumb/9/96/Symbol_category_class.svg/23px-Symbol_category_class.svg.png 1.5x, //upload.wikimedia.org/wikipedia/en/thumb/9/96/Symbol_category_class.svg/31px-Symbol_category_class.svg.png 2x" data-file-width="180" data-file-height="185" /></span></span> <b><a href="/wiki/Category:Apache_Software_Foundation" title="Category:Apache Software Foundation">Category</a></b></li></ul> </div></td></tr></tbody></table></div> <div class="navbox-styles"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1129693374"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1236075235"></div><div role="navigation" class="navbox" aria-labelledby="Programming_languages" style="padding:3px"><table class="nowraplinks hlist mw-collapsible expanded navbox-inner" style="border-spacing:0;background:transparent;color:inherit"><tbody><tr><th scope="col" class="navbox-title" colspan="2"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1129693374"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1239400231"><div class="navbar plainlinks hlist navbar-mini"><ul><li class="nv-view"><a href="/wiki/Template:Programming_languages" title="Template:Programming languages"><abbr title="View this template">v</abbr></a></li><li class="nv-talk"><a href="/wiki/Template_talk:Programming_languages" title="Template talk:Programming languages"><abbr title="Discuss this template">t</abbr></a></li><li class="nv-edit"><a href="/wiki/Special:EditPage/Template:Programming_languages" title="Special:EditPage/Template:Programming languages"><abbr title="Edit this template">e</abbr></a></li></ul></div><div id="Programming_languages" style="font-size:114%;margin:0 4em"><a href="/wiki/Programming_language" title="Programming language">Programming languages</a></div></th></tr><tr><td class="navbox-abovebelow" colspan="2"><div> <ul><li><a href="/wiki/Comparison_of_programming_languages" title="Comparison of programming languages">Comparison</a></li> <li><a href="/wiki/Timeline_of_programming_languages" title="Timeline of programming languages">Timeline</a></li> <li><a href="/wiki/History_of_programming_languages" title="History of programming languages">History</a></li></ul> </div></td></tr><tr><td colspan="2" class="navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/Ada_(programming_language)" title="Ada (programming language)">Ada</a></li> <li><a href="/wiki/ALGOL" title="ALGOL">ALGOL</a> <ul><li><a href="/wiki/Simula" title="Simula">Simula</a></li></ul></li> <li><a href="/wiki/APL_(programming_language)" title="APL (programming language)">APL</a></li> <li><a href="/wiki/Assembly_language" title="Assembly language">Assembly</a></li> <li><a href="/wiki/BASIC" title="BASIC">BASIC</a> <ul><li><a href="/wiki/Visual_Basic" title="Visual Basic">Visual Basic</a> <ul><li><a href="/wiki/Visual_Basic_(classic)" title="Visual Basic (classic)">classic</a></li> <li><a href="/wiki/Visual_Basic_(.NET)" title="Visual Basic (.NET)">.NET</a></li></ul></li></ul></li> <li><a href="/wiki/C_(programming_language)" title="C (programming language)">C</a></li> <li><a href="/wiki/C%2B%2B" title="C++">C++</a></li> <li><a href="/wiki/C_Sharp_(programming_language)" title="C Sharp (programming language)">C#</a></li> <li><a href="/wiki/COBOL" title="COBOL">COBOL</a></li> <li><a href="/wiki/Erlang_(programming_language)" title="Erlang (programming language)">Erlang</a></li> <li><a href="/wiki/Forth_(programming_language)" title="Forth (programming language)">Forth</a></li> <li><a href="/wiki/Fortran" title="Fortran">Fortran</a></li> <li><a href="/wiki/Go_(programming_language)" title="Go (programming language)">Go</a></li> <li><a href="/wiki/Haskell" title="Haskell">Haskell</a></li> <li><a href="/wiki/Java_(programming_language)" title="Java (programming language)">Java</a></li> <li><a href="/wiki/JavaScript" title="JavaScript">JavaScript</a></li> <li><a href="/wiki/Julia_(programming_language)" title="Julia (programming language)">Julia</a></li> <li><a href="/wiki/Kotlin_(programming_language)" title="Kotlin (programming language)">Kotlin</a></li> <li><a href="/wiki/Lisp_(programming_language)" title="Lisp (programming language)">Lisp</a></li> <li><a href="/wiki/Lua_(programming_language)" title="Lua (programming language)">Lua</a></li> <li><a href="/wiki/MATLAB" title="MATLAB">MATLAB</a></li> <li><a href="/wiki/ML_(programming_language)" title="ML (programming language)">ML</a></li> <li><a href="/wiki/Pascal_(programming_language)" title="Pascal (programming language)">Pascal</a> <ul><li><a href="/wiki/Object_Pascal" title="Object Pascal">Object Pascal</a></li></ul></li> <li><a href="/wiki/Perl" title="Perl">Perl</a></li> <li><a href="/wiki/PHP" title="PHP">PHP</a></li> <li><a href="/wiki/Prolog" title="Prolog">Prolog</a></li> <li><a href="/wiki/Python_(programming_language)" title="Python (programming language)">Python</a></li> <li><a href="/wiki/R_(programming_language)" title="R (programming language)">R</a></li> <li><a href="/wiki/Ruby_(programming_language)" title="Ruby (programming language)">Ruby</a></li> <li><a href="/wiki/Rust_(programming_language)" title="Rust (programming language)">Rust</a></li> <li><a href="/wiki/SQL" title="SQL">SQL</a></li> <li><a href="/wiki/Scratch_(programming_language)" title="Scratch (programming language)">Scratch</a></li> <li><a href="/wiki/Shell_script" title="Shell script">Shell</a></li> <li><a href="/wiki/Smalltalk" title="Smalltalk">Smalltalk</a></li> <li><a href="/wiki/Swift_(programming_language)" title="Swift (programming language)">Swift</a></li> <li><i><a href="/wiki/List_of_programming_languages" title="List of programming languages">more...</a></i></li></ul> </div></td></tr><tr><td class="navbox-abovebelow" colspan="2"><div> <ul><li><span class="noviewer" typeof="mw:File"><span title="List-Class article"><img alt="" src="//upload.wikimedia.org/wikipedia/en/thumb/d/db/Symbol_list_class.svg/16px-Symbol_list_class.svg.png" decoding="async" width="16" height="16" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/en/thumb/d/db/Symbol_list_class.svg/23px-Symbol_list_class.svg.png 1.5x, //upload.wikimedia.org/wikipedia/en/thumb/d/db/Symbol_list_class.svg/31px-Symbol_list_class.svg.png 2x" data-file-width="180" data-file-height="185" /></span></span> <b>Lists:</b> <a href="/wiki/List_of_programming_languages" title="List of programming languages">Alphabetical</a></li> <li><a href="/wiki/List_of_programming_languages_by_type" title="List of programming languages by type">Categorical</a></li> <li><a href="/wiki/Generational_list_of_programming_languages" title="Generational list of programming languages">Generational</a></li> <li><a href="/wiki/Non-English-based_programming_languages" title="Non-English-based programming languages">Non-English-based</a></li> <li><span class="noviewer" typeof="mw:File"><span title="Category"><img alt="" src="//upload.wikimedia.org/wikipedia/en/thumb/9/96/Symbol_category_class.svg/16px-Symbol_category_class.svg.png" decoding="async" width="16" height="16" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/en/thumb/9/96/Symbol_category_class.svg/23px-Symbol_category_class.svg.png 1.5x, //upload.wikimedia.org/wikipedia/en/thumb/9/96/Symbol_category_class.svg/31px-Symbol_category_class.svg.png 2x" data-file-width="180" data-file-height="185" /></span></span> <a href="/wiki/Category:Programming_languages" title="Category:Programming languages">Category</a></li></ul> </div></td></tr></tbody></table></div> <div class="navbox-styles"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1129693374"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1236075235"></div><div role="navigation" class="navbox" aria-labelledby="Java_(software_platform)" style="padding:3px"><table class="nowraplinks mw-collapsible autocollapse navbox-inner" style="border-spacing:0;background:transparent;color:inherit"><tbody><tr><th scope="col" class="navbox-title" colspan="3"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1129693374"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1239400231"><div class="navbar plainlinks hlist navbar-mini"><ul><li class="nv-view"><a href="/wiki/Template:Java_(software_platform)" title="Template:Java (software platform)"><abbr title="View this template">v</abbr></a></li><li class="nv-talk"><a href="/wiki/Template_talk:Java_(software_platform)" title="Template talk:Java (software platform)"><abbr title="Discuss this template">t</abbr></a></li><li class="nv-edit"><a href="/wiki/Special:EditPage/Template:Java_(software_platform)" title="Special:EditPage/Template:Java (software platform)"><abbr title="Edit this template">e</abbr></a></li></ul></div><div id="Java_(software_platform)" style="font-size:114%;margin:0 4em"><a href="/wiki/Java_(software_platform)" title="Java (software platform)">Java (software platform)</a></div></th></tr><tr><th scope="row" class="navbox-group" style="width:1%">Platforms</th><td class="navbox-list-with-group navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/Java_virtual_machine" title="Java virtual machine">JVM</a></li> <li><a href="/wiki/Java_Platform,_Micro_Edition" title="Java Platform, Micro Edition">Java ME</a> (Micro)</li> <li><a href="/wiki/Java_Platform,_Standard_Edition" title="Java Platform, Standard Edition">Java SE</a> (Standard)</li> <li><a href="/wiki/Jakarta_EE" title="Jakarta EE">Jakarta EE</a> (Enterprise)</li> <li><a href="/wiki/Java_Card" title="Java Card">Java Card</a></li> <li><a href="/wiki/Android_software_development#SDK" title="Android software development">Android SDK</a></li> <li><a href="/wiki/GraalVM" title="GraalVM">GraalVM</a></li></ul> </div></td><td class="noviewer navbox-image" rowspan="7" style="width:1px;padding:0 0 0 2px"><div><span typeof="mw:File"><a href="/wiki/File:Duke_(Java_mascot)_waving.svg" class="mw-file-description"><img src="//upload.wikimedia.org/wikipedia/commons/thumb/5/5d/Duke_%28Java_mascot%29_waving.svg/75px-Duke_%28Java_mascot%29_waving.svg.png" decoding="async" width="75" height="135" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/5/5d/Duke_%28Java_mascot%29_waving.svg/113px-Duke_%28Java_mascot%29_waving.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/5/5d/Duke_%28Java_mascot%29_waving.svg/150px-Duke_%28Java_mascot%29_waving.svg.png 2x" data-file-width="226" data-file-height="407" /></a></span></div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Oracle technologies</th><td class="navbox-list-with-group navbox-list navbox-even hlist" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/Squawk_virtual_machine" title="Squawk virtual machine">Squawk</a></li> <li><a href="/wiki/Java_Development_Kit" title="Java Development Kit">Java Development Kit</a></li> <li><a href="/wiki/OpenJDK" title="OpenJDK">OpenJDK</a></li> <li><a href="/wiki/Java_virtual_machine" title="Java virtual machine">Java virtual machine</a></li> <li><a href="/wiki/JavaFX" title="JavaFX">JavaFX</a></li> <li><a href="/wiki/Maxine_Virtual_Machine" title="Maxine Virtual Machine">Maxine VM</a></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Platform technologies</th><td class="navbox-list-with-group navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/Jakarta_Servlet" title="Jakarta Servlet">Servlets</a></li> <li><a href="/wiki/MIDlet" title="MIDlet">MIDlets</a></li> <li><a href="/wiki/Jakarta_Server_Pages" title="Jakarta Server Pages">JSP</a></li> <li><a href="/wiki/Jakarta_Faces" title="Jakarta Faces">JSF</a></li> <li><a href="/wiki/Java_Web_Start" title="Java Web Start">Web Start</a> (JNLP)</li> <li><a href="/wiki/Pack200" title="Pack200">Pack200</a></li> <li><a href="/wiki/Java_Platform_Module_System" title="Java Platform Module System">Modules</a></li> <li><a href="/wiki/Java_applet" title="Java applet">applets</a></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Major third-party<br />technologies</th><td class="navbox-list-with-group navbox-list navbox-even hlist" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/Eclipse_(software)" title="Eclipse (software)">Eclipse</a></li> <li><a href="/wiki/GNU_Classpath" title="GNU Classpath">GNU Classpath</a></li> <li><a href="/wiki/Hibernate_(framework)" title="Hibernate (framework)">Hibernate</a></li> <li><a href="/wiki/Spring_Framework" title="Spring Framework">Spring</a></li> <li><a href="/wiki/Google_Web_Toolkit" title="Google Web Toolkit">GWT</a></li> <li><a href="/wiki/IcedTea" title="IcedTea">IcedTea</a></li> <li><a href="/wiki/Jazelle" title="Jazelle">Jazelle</a></li> <li><a href="/wiki/Apache_Struts" title="Apache Struts">Struts</a></li> <li><a href="/wiki/Oracle_TopLink" title="Oracle TopLink">TopLink</a></li> <li><a href="/wiki/WildFly" title="WildFly">WildFly</a></li> <li><a href="/wiki/Blackdown_Java" title="Blackdown Java">blackdown</a></li> <li><a href="/wiki/Apache_Harmony" title="Apache Harmony">harmony</a></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">History</th><td class="navbox-list-with-group navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/Java_version_history" title="Java version history">Java version history</a></li> <li><a href="/wiki/Java_Community_Process" title="Java Community Process">Java Community Process</a></li> <li><a href="/wiki/Sun_Microsystems" title="Sun Microsystems">Sun Microsystems</a></li> <li><a href="/wiki/Free_Java_implementations" title="Free Java implementations">Free Java implementations</a></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="/wiki/List_of_JVM_languages" title="List of JVM languages">JVM languages</a></th><td class="navbox-list-with-group navbox-list navbox-even hlist" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/Java_(programming_language)" title="Java (programming language)">Java</a></li> <li><a href="/wiki/BeanShell" title="BeanShell">BeanShell</a></li> <li><a href="/wiki/Clojure" title="Clojure">Clojure</a></li> <li><a href="/wiki/Groovy_(programming_language)" class="mw-redirect" title="Groovy (programming language)">Groovy</a></li> <li><a href="/wiki/JRuby" title="JRuby">JRuby</a></li> <li><a href="/wiki/Jython" title="Jython">Jython</a></li> <li><a href="/wiki/Kotlin_(programming_language)" title="Kotlin (programming language)">Kotlin</a></li> <li><a href="/wiki/Processing" title="Processing">Processing</a></li> <li><a href="/wiki/Rhino_(JavaScript_engine)" title="Rhino (JavaScript engine)">Rhino</a></li> <li><a href="/wiki/Scala_(programming_language)" title="Scala (programming language)">Scala</a></li> <li><a href="/wiki/Oxygene_(programming_language)" title="Oxygene (programming language)">Oxygene</a></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Community</th><td class="navbox-list-with-group navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em"></div><table class="nowraplinks navbox-subgroup" style="border-spacing:0"><tbody><tr><th scope="row" class="navbox-group" style="width:1%"><a href="/wiki/Professional_conference" title="Professional conference">Conferences</a></th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/JavaOne" title="JavaOne">JavaOne</a></li> <li><a href="/wiki/Devoxx" title="Devoxx">Devoxx</a></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Organizations</th><td class="navbox-list-with-group navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/Apache_Software_Foundation" class="mw-redirect" title="Apache Software Foundation">Apache Software Foundation</a></li> <li><a href="/wiki/Eclipse_Foundation" title="Eclipse Foundation">Eclipse Foundation</a></li> <li><a href="/wiki/Java_Community_Process" title="Java Community Process">Java Community Process</a></li> <li><a href="/wiki/Oracle_Corporation" title="Oracle Corporation">Oracle Corporation</a></li> <li><a href="/wiki/Sun_Microsystems" title="Sun Microsystems">Sun Microsystems</a>, <a href="/wiki/Sun_Microsystems_Laboratories" class="mw-redirect" title="Sun Microsystems Laboratories">Sun Microsystems Laboratories</a></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">People</th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/James_Gosling" title="James Gosling">James Gosling</a></li> <li><a href="/wiki/Arthur_van_Hoff" title="Arthur van Hoff">Arthur van Hoff</a></li> <li><a href="/wiki/Urs_H%C3%B6lzle" title="Urs Hölzle">Urs Hölzle</a></li> <li><a href="/wiki/Patrick_Naughton" title="Patrick Naughton">Patrick Naughton</a></li></ul> </div></td></tr></tbody></table><div></div></td></tr><tr><td class="navbox-abovebelow" colspan="3"><div><span class="noviewer" typeof="mw:File"><span title="Category"><img alt="" src="//upload.wikimedia.org/wikipedia/en/thumb/9/96/Symbol_category_class.svg/16px-Symbol_category_class.svg.png" decoding="async" width="16" height="16" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/en/thumb/9/96/Symbol_category_class.svg/23px-Symbol_category_class.svg.png 1.5x, //upload.wikimedia.org/wikipedia/en/thumb/9/96/Symbol_category_class.svg/31px-Symbol_category_class.svg.png 2x" data-file-width="180" data-file-height="185" /></span></span> <b><a href="/wiki/Category:Java_(programming_language)" title="Category:Java (programming language)">Category</a></b>   <span class="nowrap"><span class="noviewer" typeof="mw:File"><a href="/wiki/File:Octicons-terminal.svg" class="mw-file-description"><img alt="icon" src="//upload.wikimedia.org/wikipedia/commons/thumb/6/6f/Octicons-terminal.svg/24px-Octicons-terminal.svg.png" decoding="async" width="24" height="28" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/6/6f/Octicons-terminal.svg/37px-Octicons-terminal.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/6/6f/Octicons-terminal.svg/49px-Octicons-terminal.svg.png 2x" data-file-width="896" data-file-height="1024" /></a></span> </span><a href="/wiki/Portal:Computer_programming" title="Portal:Computer programming">Computer programming portal</a></div></td></tr></tbody></table></div> <div class="navbox-styles"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1129693374"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1236075235"></div><div role="navigation" class="navbox authority-control" aria-label="Navbox" style="padding:3px"><table class="nowraplinks hlist navbox-inner" style="border-spacing:0;background:transparent;color:inherit"><tbody><tr><th scope="row" class="navbox-group" style="width:1%"><a href="/wiki/Help:Authority_control" title="Help:Authority control">Authority control databases</a>: National <span class="mw-valign-text-top noprint" typeof="mw:File/Frameless"><a href="https://www.wikidata.org/wiki/Q504453#identifiers" title="Edit this at Wikidata"><img alt="Edit this at Wikidata" src="//upload.wikimedia.org/wikipedia/en/thumb/8/8a/OOjs_UI_icon_edit-ltr-progressive.svg/10px-OOjs_UI_icon_edit-ltr-progressive.svg.png" decoding="async" width="10" height="10" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/en/thumb/8/8a/OOjs_UI_icon_edit-ltr-progressive.svg/15px-OOjs_UI_icon_edit-ltr-progressive.svg.png 1.5x, //upload.wikimedia.org/wikipedia/en/thumb/8/8a/OOjs_UI_icon_edit-ltr-progressive.svg/20px-OOjs_UI_icon_edit-ltr-progressive.svg.png 2x" data-file-width="20" data-file-height="20" /></a></span></th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"><ul><li><span class="uid"><a rel="nofollow" class="external text" href="https://id.loc.gov/authorities/sh2007001244">United States</a></span></li><li><span class="uid"><a rel="nofollow" class="external text" href="http://olduli.nli.org.il/F/?func=find-b&local_base=NLX10&find_code=UID&request=987007549666405171">Israel</a></span></li></ul></div></td></tr></tbody></table></div> <!-- NewPP limit report Parsed by mw‐web.codfw.main‐f69cdc8f6‐rhwrx Cached time: 20241123110944 Cache expiry: 651031 Reduced expiry: true Complications: [vary‐revision‐sha1, show‐toc] CPU time usage: 1.037 seconds Real time usage: 1.354 seconds Preprocessor visited node count: 4634/1000000 Post‐expand include size: 156411/2097152 bytes Template argument size: 6703/2097152 bytes Highest expansion depth: 27/100 Expensive parser function count: 29/500 Unstrip recursion depth: 1/20 Unstrip post‐expand size: 240247/5000000 bytes Lua time usage: 0.639/10.000 seconds Lua memory usage: 9713952/52428800 bytes Number of Wikibase entities loaded: 1/400 --> <!-- Transclusion expansion time report (%,ms,calls,template) 100.00% 1098.129 1 -total 69.23% 760.277 2 Template:Infobox 38.58% 423.693 1 Template:Infobox_programming_language 31.53% 346.280 1 Template:Infobox_software/simple 24.61% 270.210 1 Template:Latest_stable_software_release/Groovy 24.47% 268.678 1 Template:LSR 24.43% 268.260 3 Template:Wikidata 20.60% 226.247 1 Template:Reflist 15.87% 174.297 46 Template:Cite_web 11.29% 123.948 4 Template:Navbox --> <!-- Saved in parser cache with key enwiki:pcache:idhash:508401-0!canonical and timestamp 20241123110944 and revision id 1251972389. Rendering was triggered because: page-view --> </div><!--esi <esi:include src="/esitest-fa8a495983347898/content" /> --><noscript><img src="https://login.wikimedia.org/wiki/Special:CentralAutoLogin/start?type=1x1" alt="" width="1" height="1" style="border: none; position: absolute;"></noscript> <div class="printfooter" data-nosnippet="">Retrieved from "<a dir="ltr" href="https://en.wikipedia.org/w/index.php?title=Apache_Groovy&oldid=1251972389">https://en.wikipedia.org/w/index.php?title=Apache_Groovy&oldid=1251972389</a>"</div></div> <div id="catlinks" class="catlinks" data-mw="interface"><div id="mw-normal-catlinks" class="mw-normal-catlinks"><a href="/wiki/Help:Category" title="Help:Category">Categories</a>: <ul><li><a href="/wiki/Category:Dynamically_typed_programming_languages" title="Category:Dynamically typed programming languages">Dynamically typed programming languages</a></li><li><a href="/wiki/Category:Java_programming_language_family" title="Category:Java programming language family">Java programming language family</a></li><li><a href="/wiki/Category:Java_specification_requests" title="Category:Java specification requests">Java specification requests</a></li><li><a href="/wiki/Category:JVM_programming_languages" title="Category:JVM programming languages">JVM programming languages</a></li><li><a href="/wiki/Category:Object-oriented_programming_languages" title="Category:Object-oriented programming languages">Object-oriented programming languages</a></li><li><a href="/wiki/Category:Programming_languages_created_in_2003" title="Category:Programming languages created in 2003">Programming languages created in 2003</a></li><li><a href="/wiki/Category:Scripting_languages" title="Category:Scripting languages">Scripting languages</a></li><li><a href="/wiki/Category:Software_using_the_Apache_license" title="Category:Software using the Apache license">Software using the Apache license</a></li><li><a href="/wiki/Category:Programming_languages" title="Category:Programming languages">Programming languages</a></li><li><a href="/wiki/Category:Dynamic_programming_languages" title="Category:Dynamic programming languages">Dynamic programming languages</a></li><li><a href="/wiki/Category:2003_software" title="Category:2003 software">2003 software</a></li><li><a href="/wiki/Category:Cross-platform_free_software" title="Category:Cross-platform free software">Cross-platform free software</a></li><li><a href="/wiki/Category:Cross-platform_software" title="Category:Cross-platform software">Cross-platform software</a></li><li><a href="/wiki/Category:High-level_programming_languages" title="Category:High-level programming languages">High-level programming languages</a></li></ul></div><div id="mw-hidden-catlinks" class="mw-hidden-catlinks mw-hidden-cats-hidden">Hidden categories: <ul><li><a href="/wiki/Category:Articles_with_short_description" title="Category:Articles with short description">Articles with short description</a></li><li><a href="/wiki/Category:Short_description_matches_Wikidata" title="Category:Short description matches Wikidata">Short description matches Wikidata</a></li><li><a href="/wiki/Category:All_articles_with_unsourced_statements" title="Category:All articles with unsourced statements">All articles with unsourced statements</a></li><li><a href="/wiki/Category:Articles_with_unsourced_statements_from_May_2012" title="Category:Articles with unsourced statements from May 2012">Articles with unsourced statements from May 2012</a></li><li><a href="/wiki/Category:Articles_with_unsourced_statements_from_November_2008" title="Category:Articles with unsourced statements from November 2008">Articles with unsourced statements from November 2008</a></li><li><a href="/wiki/Category:Articles_with_unsourced_statements_from_June_2016" title="Category:Articles with unsourced statements from June 2016">Articles with unsourced statements from June 2016</a></li><li><a href="/wiki/Category:Articles_with_example_code" title="Category:Articles with example code">Articles with example code</a></li></ul></div></div> </div> </main> </div> <div class="mw-footer-container"> <footer id="footer" class="mw-footer" > <ul id="footer-info"> <li id="footer-info-lastmod"> This page was last edited on 19 October 2024, at 03:16<span class="anonymous-show"> (UTC)</span>.</li> <li id="footer-info-copyright">Text is available under the <a href="/wiki/Wikipedia:Text_of_the_Creative_Commons_Attribution-ShareAlike_4.0_International_License" title="Wikipedia:Text of the Creative Commons Attribution-ShareAlike 4.0 International License">Creative Commons Attribution-ShareAlike 4.0 License</a>; additional terms may apply. By using this site, you agree to the <a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Terms_of_Use" class="extiw" title="foundation:Special:MyLanguage/Policy:Terms of Use">Terms of Use</a> and <a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Privacy_policy" class="extiw" title="foundation:Special:MyLanguage/Policy:Privacy policy">Privacy Policy</a>. Wikipedia® is a registered trademark of the <a rel="nofollow" class="external text" href="https://wikimediafoundation.org/">Wikimedia Foundation, Inc.</a>, a non-profit organization.</li> </ul> <ul id="footer-places"> <li id="footer-places-privacy"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Privacy_policy">Privacy policy</a></li> <li id="footer-places-about"><a href="/wiki/Wikipedia:About">About Wikipedia</a></li> <li id="footer-places-disclaimers"><a href="/wiki/Wikipedia:General_disclaimer">Disclaimers</a></li> <li id="footer-places-contact"><a href="//en.wikipedia.org/wiki/Wikipedia:Contact_us">Contact Wikipedia</a></li> <li id="footer-places-wm-codeofconduct"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Universal_Code_of_Conduct">Code of Conduct</a></li> <li id="footer-places-developers"><a href="https://developer.wikimedia.org">Developers</a></li> <li id="footer-places-statslink"><a href="https://stats.wikimedia.org/#/en.wikipedia.org">Statistics</a></li> <li id="footer-places-cookiestatement"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Cookie_statement">Cookie statement</a></li> <li id="footer-places-mobileview"><a href="//en.m.wikipedia.org/w/index.php?title=Apache_Groovy&mobileaction=toggle_view_mobile" class="noprint stopMobileRedirectToggle">Mobile view</a></li> </ul> <ul id="footer-icons" class="noprint"> <li id="footer-copyrightico"><a href="https://wikimediafoundation.org/" class="cdx-button cdx-button--fake-button cdx-button--size-large cdx-button--fake-button--enabled"><img src="/static/images/footer/wikimedia-button.svg" width="84" height="29" alt="Wikimedia Foundation" loading="lazy"></a></li> <li id="footer-poweredbyico"><a href="https://www.mediawiki.org/" class="cdx-button cdx-button--fake-button cdx-button--size-large cdx-button--fake-button--enabled"><img src="/w/resources/assets/poweredby_mediawiki.svg" alt="Powered by MediaWiki" width="88" height="31" loading="lazy"></a></li> </ul> </footer> </div> </div> </div> <div class="vector-settings" id="p-dock-bottom"> <ul></ul> </div><script>(RLQ=window.RLQ||[]).push(function(){mw.config.set({"wgHostname":"mw-web.codfw.main-f69cdc8f6-b2n64","wgBackendResponseTime":156,"wgPageParseReport":{"limitreport":{"cputime":"1.037","walltime":"1.354","ppvisitednodes":{"value":4634,"limit":1000000},"postexpandincludesize":{"value":156411,"limit":2097152},"templateargumentsize":{"value":6703,"limit":2097152},"expansiondepth":{"value":27,"limit":100},"expensivefunctioncount":{"value":29,"limit":500},"unstrip-depth":{"value":1,"limit":20},"unstrip-size":{"value":240247,"limit":5000000},"entityaccesscount":{"value":1,"limit":400},"timingprofile":["100.00% 1098.129 1 -total"," 69.23% 760.277 2 Template:Infobox"," 38.58% 423.693 1 Template:Infobox_programming_language"," 31.53% 346.280 1 Template:Infobox_software/simple"," 24.61% 270.210 1 Template:Latest_stable_software_release/Groovy"," 24.47% 268.678 1 Template:LSR"," 24.43% 268.260 3 Template:Wikidata"," 20.60% 226.247 1 Template:Reflist"," 15.87% 174.297 46 Template:Cite_web"," 11.29% 123.948 4 Template:Navbox"]},"scribunto":{"limitreport-timeusage":{"value":"0.639","limit":"10.000"},"limitreport-memusage":{"value":9713952,"limit":52428800},"limitreport-logs":"table#1 {\n}\n"},"cachereport":{"origin":"mw-web.codfw.main-f69cdc8f6-rhwrx","timestamp":"20241123110944","ttl":651031,"transientcontent":true}}});});</script> <script type="application/ld+json">{"@context":"https:\/\/schema.org","@type":"Article","name":"Apache Groovy","url":"https:\/\/en.wikipedia.org\/wiki\/Apache_Groovy","sameAs":"http:\/\/www.wikidata.org\/entity\/Q504453","mainEntity":"http:\/\/www.wikidata.org\/entity\/Q504453","author":{"@type":"Organization","name":"Contributors to Wikimedia projects"},"publisher":{"@type":"Organization","name":"Wikimedia Foundation, Inc.","logo":{"@type":"ImageObject","url":"https:\/\/www.wikimedia.org\/static\/images\/wmf-hor-googpub.png"}},"datePublished":"2004-03-06T15:37:23Z","dateModified":"2024-10-19T03:16:22Z","image":"https:\/\/upload.wikimedia.org\/wikipedia\/commons\/3\/36\/Groovy-logo.svg","headline":"programming language"}</script> </body> </html>