CINXE.COM
Road to Gradle 9 with Louis Jacomet
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title> Road to Gradle 9 with Louis Jacomet </title> <link href="https://fonts.googleapis.com/css?family=Source+Code+Pro:500" rel="stylesheet"> <link rel="stylesheet" href="https://blog.gradle.org/styles.css"> <link rel="alternate" type="application/atom+xml" title="The Gradle Blog: All Posts" href="https://feed.gradle.org/blog.atom"> <link rel="alternate" type="application/atom+xml" title="The Gradle Blog: New Features" href="https://feed.gradle.org/blog/features.atom"> <link rel="alternate" type="application/atom+xml" title="The Gradle Blog: Events" href="https://feed.gradle.org/blog/events.atom"> <link rel="alternate" type="application/atom+xml" title="The Gradle Blog: General" href="https://feed.gradle.org/blog/general.atom"> <link rel="alternate" type="application/atom+xml" title="The Gradle Blog: Security" href="https://feed.gradle.org/blog/security.atom"> <link rel="apple-touch-icon" sizes="180x180" href="https://blog.gradle.org/icon/apple-touch-icon.png"> <link rel="dns-prefetch" href="https://avatars.githubusercontent.com"> <link rel="icon" type="image/png" href="https://blog.gradle.org/icon/favicon-32x32.png" sizes="32x32"> <link rel="icon" type="image/png" href="https://blog.gradle.org/icon/favicon-16x16.png" sizes="16x16"> <link rel="manifest" href="https://blog.gradle.org/icon/manifest.json"> <link rel="mask-icon" href="https://blog.gradle.org/icon/safari-pinned-tab.svg" color="#5bbad5"> <link rel="shortcut icon" href="https://blog.gradle.org/icon/favicon.ico"> <link rel="canonical" href="https://blog.gradle.org/road-to-gradle-9"> <meta name="apple-mobile-web-app-title" content="The Gradle Blog"> <meta name="application-name" content="The Gradle Blog"> <meta name="msapplication-config" content="https://blog.gradle.org/icon/browserconfig.xml"> <meta name="theme-color" content="#ffffff"> <meta name="description" content="At Devoxx France, we sat down with Louis Jacomet, a tech lead at Gradle Inc. Louis leads the Gradle Build Tool support team and coordinates releases, so you can often see him active on GitHub issues and speaking at Gradle conferences. Let’s dive into what Louis shares about th..."> <meta name="twitter:card" content="summary_large_image"> <meta name="twitter:site" content="@gradle"> <meta name="twitter:creator" content="@gradle"> <meta name="twitter:title" content="Road to Gradle 9 with Louis Jacomet"> <meta name="twitter:url" content="https://blog.gradle.org/road-to-gradle-9"> <meta name="twitter:description" content="At Devoxx France, we sat down with Louis Jacomet, a tech lead at Gradle Inc. Louis leads the Gradle Build Tool support team and coordinates releases, so you can often see him active on GitHub issues and spea..."> <meta name="twitter:image" content="https://blog.gradle.org/images/2024/road-to-gradle-9/image5.png"> <meta name="og:image" content="https://blog.gradle.org/images/2024/road-to-gradle-9/image5.png"> <meta name="og:description" content="At Devoxx France, we sat down with Louis Jacomet, a tech lead at Gradle Inc. Louis leads the Gradle Build Tool support team and coordinates releases, so you can often see him active on GitHub issues and spea..."> <script src="https://blog.gradle.org/js/google-tag-support.js"></script> <script> (function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','GTM-WRTQKGT'); </script> </head> <body> <!-- Google Tag Manager (noscript) --> <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-WRTQKGT" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript> <!-- End Google Tag Manager (noscript) --> <header class="site-layout__header site-header" itemscope itemtype="https://schema.org/WPHeader"> <nav class="site-header__navigation" itemscope itemtype="https://schema.org/SiteNavigationElement"> <div class="site-header__navigation-header"> <a class="logo" href="https://blog.gradle.org/" title="Gradle Logo"><?xml version="1.0" encoding="UTF-8"?> <svg width="198px" height="43px" viewBox="0 0 198 43" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <!-- Generator: Sketch 53.2 (72643) - https://sketchapp.com --> <title>gradle-blog-primary-dark</title> <desc>Created with Sketch.</desc> <defs> <polygon id="path-1" points="0.000112166893 0.000117808219 197.328879 0.000117808219 197.328879 43.0001178 0.000112166893 43.0001178"></polygon> </defs> <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> <g id="branding-guidelines" transform="translate(-661.000000, -5031.000000)"> <g id="gradle-blog-primary-dark" transform="translate(661.000000, 5031.000000)"> <mask id="mask-2" fill="white"> <use xlink:href="#path-1"></use> </mask> <g id="Clip-2"></g> <path d="M146.694795,37.6986301 L146.694795,17.6947945 L152.448548,17.6947945 C153.588937,17.6947945 154.57616,17.8078893 155.410247,18.0340822 C156.244333,18.2602751 156.934682,18.592491 157.481315,19.0307397 C158.027948,19.4689885 158.43556,20.0038325 158.704164,20.6352877 C158.972768,21.2667429 159.107068,21.9830097 159.107068,22.7841096 C159.107068,23.311893 159.015179,23.8208195 158.831397,24.3109041 C158.647616,24.8009888 158.381372,25.2533678 158.032658,25.6680548 C157.683943,26.0827418 157.257482,26.4432313 156.75326,26.7495342 C156.249039,27.0558371 155.671784,27.2890951 155.021479,27.4493151 C156.595405,27.6849327 157.806462,28.2079959 158.654685,29.0185205 C159.502908,29.8290451 159.927014,30.8987331 159.927014,32.2276164 C159.927014,33.0758399 159.776221,33.8392295 159.47463,34.5178082 C159.17304,35.196387 158.734797,35.7712853 158.15989,36.2425205 C157.584983,36.7137558 156.878141,37.0742453 156.039342,37.324 C155.200544,37.5737547 154.248663,37.6986301 153.183671,37.6986301 L146.694795,37.6986301 Z M148.136767,28.1137534 L148.136767,36.5393973 L153.155397,36.5393973 C154.917817,36.5393973 156.24668,36.1600586 157.142027,35.4013699 C158.037374,34.6426811 158.485041,33.5753493 158.485041,32.1993425 C158.485041,31.5678873 158.364878,31.0000573 158.124548,30.4958356 C157.884218,29.9916139 157.537865,29.5627963 157.085479,29.2093699 C156.633094,28.8559434 156.077044,28.5849872 155.417315,28.3964932 C154.757586,28.2079991 154.008333,28.1137534 153.169534,28.1137534 L148.136767,28.1137534 Z M148.136767,27.0534795 L152.476822,27.0534795 C153.400443,27.0534795 154.18975,26.9356724 154.844767,26.7000548 C155.499784,26.4644372 156.036984,26.1534266 156.456384,25.7670137 C156.875783,25.3806008 157.184437,24.9423586 157.382356,24.452274 C157.580275,23.9621893 157.679233,23.4579752 157.679233,22.9396164 C157.679233,21.5918837 157.252771,20.5716747 156.399836,19.8789589 C155.5469,19.1862431 154.229817,18.8398904 152.448548,18.8398904 L148.136767,18.8398904 L148.136767,27.0534795 Z M165.760877,17.1293151 L165.760877,37.6986301 L164.417863,37.6986301 L164.417863,17.1293151 L165.760877,17.1293151 Z M175.977205,23.406137 C176.985649,23.406137 177.888051,23.5781353 178.684438,23.922137 C179.480826,24.2661387 180.152326,24.7538599 180.698959,25.3853151 C181.245592,26.0167703 181.662629,26.7778038 181.950082,27.6684384 C182.237536,28.5590729 182.38126,29.5557205 182.38126,30.658411 C182.38126,31.7611014 182.237536,32.7553928 181.950082,33.6413151 C181.662629,34.5272373 181.245592,35.2859147 180.698959,35.9173699 C180.152326,36.5488251 179.480826,37.0341901 178.684438,37.3734795 C177.888051,37.7127688 176.985649,37.882411 175.977205,37.882411 C174.968762,37.882411 174.06636,37.7127688 173.269973,37.3734795 C172.473585,37.0341901 171.799729,36.5488251 171.248384,35.9173699 C170.697038,35.2859147 170.277645,34.5272373 169.990192,33.6413151 C169.702738,32.7553928 169.559014,31.7611014 169.559014,30.658411 C169.559014,29.5557205 169.702738,28.5590729 169.990192,27.6684384 C170.277645,26.7778038 170.697038,26.0167703 171.248384,25.3853151 C171.799729,24.7538599 172.473585,24.2661387 173.269973,23.922137 C174.06636,23.5781353 174.968762,23.406137 175.977205,23.406137 Z M175.977205,36.822137 C176.816004,36.822137 177.548764,36.6784124 178.175507,36.3909589 C178.80225,36.1035054 179.325313,35.6911808 179.744712,35.1539726 C180.164112,34.6167644 180.477478,33.9688257 180.684822,33.210137 C180.892165,32.4514483 180.995836,31.6008814 180.995836,30.658411 C180.995836,29.7253652 180.892165,28.8771545 180.684822,28.1137534 C180.477478,27.3503523 180.164112,26.6977013 179.744712,26.1557808 C179.325313,25.6138603 178.80225,25.1968234 178.175507,24.9046575 C177.548764,24.6124917 176.816004,24.466411 175.977205,24.466411 C175.138407,24.466411 174.405647,24.6124917 173.778904,24.9046575 C173.152161,25.1968234 172.629098,25.6138603 172.209699,26.1557808 C171.790299,26.6977013 171.474576,27.3503523 171.262521,28.1137534 C171.050465,28.8771545 170.944438,29.7253652 170.944438,30.658411 C170.944438,31.6008814 171.050465,32.4514483 171.262521,33.210137 C171.474576,33.9688257 171.790299,34.6167644 172.209699,35.1539726 C172.629098,35.6911808 173.152161,36.1035054 173.778904,36.3909589 C174.405647,36.6784124 175.138407,36.822137 175.977205,36.822137 Z M190.43463,23.392 C191.047236,23.392 191.615066,23.4673965 192.138137,23.6181918 C192.661208,23.7689871 193.13008,23.9810397 193.544767,24.2543562 L197.149699,24.2543562 L197.149699,24.7208767 C197.149699,24.9564943 197.017755,25.0837259 196.753863,25.1025753 L194.619178,25.2580822 C194.88307,25.616221 195.085698,26.019121 195.227068,26.4667945 C195.368439,26.914468 195.439123,27.3927646 195.439123,27.9016986 C195.439123,28.5802774 195.316604,29.1952301 195.071562,29.7465753 C194.826519,30.2979206 194.484879,30.7691487 194.04663,31.160274 C193.608381,31.5513992 193.082962,31.8553414 192.470356,32.0721096 C191.85775,32.2888778 191.179182,32.3972603 190.43463,32.3972603 C189.624106,32.3972603 188.88899,32.274741 188.22926,32.0296986 C187.833423,32.2558915 187.522412,32.5244916 187.296219,32.8355068 C187.070026,33.1465221 186.956932,33.4481081 186.956932,33.740274 C186.956932,34.1455363 187.0983,34.4565469 187.381041,34.6733151 C187.663782,34.8900833 188.038409,35.0479447 188.504932,35.1469041 C188.971454,35.2458635 189.503942,35.3094793 190.102411,35.3377534 C190.70088,35.3660275 191.308764,35.3966574 191.926082,35.4296438 C192.5434,35.4626303 193.151285,35.5215338 193.749753,35.6063562 C194.348222,35.6911785 194.88071,35.8396154 195.347233,36.0516712 C195.813756,36.2637271 196.188382,36.5606008 196.471123,36.9423014 C196.753864,37.3240019 196.895233,37.8305722 196.895233,38.4620274 C196.895233,39.0463591 196.749152,39.6071206 196.456986,40.1443288 C196.16482,40.6815369 195.743071,41.1574774 195.191726,41.5721644 C194.640381,41.9868514 193.973593,42.3190672 193.191342,42.5688219 C192.409092,42.8185766 191.532608,42.9434521 190.561863,42.9434521 C189.572269,42.9434521 188.705209,42.842138 187.960658,42.6395068 C187.216106,42.4368757 186.591729,42.1635634 186.087507,41.8195616 C185.583285,41.4755599 185.203946,41.0773721 184.949479,40.6249863 C184.695012,40.1726005 184.567781,39.6919478 184.567781,39.1830137 C184.567781,38.438462 184.812819,37.7975917 185.302904,37.2603836 C185.792989,36.7231754 186.466845,36.3084946 187.324493,36.0163288 C186.853258,35.8561088 186.478632,35.625207 186.200603,35.3236164 C185.922574,35.0220259 185.783562,34.6026328 185.783562,34.0654247 C185.783562,33.8675059 185.82126,33.6601655 185.896658,33.4433973 C185.972055,33.2266291 186.08515,33.0122202 186.235945,32.8001644 C186.38674,32.5881085 186.568163,32.3878366 186.780219,32.1993425 C186.992275,32.0108484 187.23967,31.8412062 187.522411,31.690411 C186.853257,31.3039981 186.33255,30.7903594 185.960274,30.1494795 C185.587998,29.5085995 185.401863,28.7593468 185.401863,27.9016986 C185.401863,27.2231199 185.522026,26.6081671 185.762356,26.0568219 C186.002686,25.5054767 186.34197,25.0318924 186.780219,24.6360548 C187.218468,24.2402172 187.7486,23.9339189 188.37063,23.7171507 C188.992661,23.5003825 189.680654,23.392 190.43463,23.392 Z M195.651178,38.6458082 C195.651178,38.2028471 195.535727,37.8470698 195.304822,37.5784658 C195.073917,37.3098617 194.765262,37.1001651 194.378849,36.9493699 C193.992436,36.7985746 193.547126,36.6925483 193.042904,36.6312877 C192.538682,36.5700271 192.010907,36.5252604 191.459562,36.4969863 C190.908216,36.4687122 190.354523,36.4404385 189.798466,36.4121644 C189.242408,36.3838903 188.724057,36.3273429 188.243397,36.2425205 C187.885258,36.3838911 187.553043,36.5464648 187.24674,36.7302466 C186.940437,36.9140283 186.678905,37.1213687 186.462137,37.352274 C186.245369,37.5831792 186.075727,37.8376424 185.953205,38.1156712 C185.830684,38.3937 185.769425,38.6976422 185.769425,39.0275068 C185.769425,39.4421939 185.875451,39.8262448 186.087507,40.1796712 C186.299563,40.5330977 186.610573,40.839396 187.020548,41.0985753 C187.430523,41.3577547 187.932381,41.562739 188.526137,41.7135342 C189.119893,41.8643295 189.803174,41.939726 190.576,41.939726 C191.292278,41.939726 191.959065,41.8596172 192.576384,41.6993973 C193.193702,41.5391773 193.730902,41.3129878 194.188,41.0208219 C194.645098,40.7286561 195.003232,40.3799472 195.262411,39.9746849 C195.52159,39.5694226 195.651178,39.1264682 195.651178,38.6458082 Z M190.43463,31.4783562 C191.037811,31.4783562 191.575011,31.391179 192.046247,31.2168219 C192.517482,31.0424649 192.913313,30.7997824 193.233753,30.4887671 C193.554193,30.1777519 193.796876,29.8054816 193.961808,29.3719452 C194.126741,28.9384088 194.209205,28.4577561 194.209205,27.9299726 C194.209205,27.4021891 194.124384,26.9191803 193.95474,26.4809315 C193.785095,26.0426827 193.5377,25.6680563 193.212548,25.3570411 C192.887396,25.0460258 192.491564,24.8056995 192.025041,24.6360548 C191.558518,24.4664101 191.028387,24.381589 190.43463,24.381589 C189.840874,24.381589 189.308386,24.4664101 188.837151,24.6360548 C188.365915,24.8056995 187.967728,25.0460258 187.642575,25.3570411 C187.317423,25.6680563 187.070028,26.0426827 186.900384,26.4809315 C186.730739,26.9191803 186.645918,27.4021891 186.645918,27.9299726 C186.645918,28.4577561 186.730739,28.9384088 186.900384,29.3719452 C187.070028,29.8054816 187.317423,30.1777519 187.642575,30.4887671 C187.967728,30.7997824 188.365915,31.0424649 188.837151,31.2168219 C189.308386,31.391179 189.840874,31.4783562 190.43463,31.4783562 Z" id="Blog" fill="#02303A" fill-rule="nonzero" mask="url(#mask-2)"></path> <path d="M34.9999384,17.029826 L32.5265548,15.7875384 C32.5265548,15.7857712 32.5259658,15.7840041 32.5259658,15.782237 C32.5259658,14.9245932 33.2210342,14.2289356 34.0792671,14.2289356 C34.936911,14.2289356 35.6313904,14.9245932 35.6313904,15.782237 C35.6313904,16.2941137 35.382226,16.7476753 34.9999384,17.029826 L34.9999384,17.029826 Z M48.2368699,2.36918219 C45.143226,-0.724461644 40.1634726,-0.789256164 36.9961986,2.17892192 C36.843637,2.32146986 36.7552808,2.51997671 36.7523356,2.7290863 C36.7488014,2.93760685 36.830089,3.1390589 36.9773493,3.28690822 L37.9963904,4.30536027 C38.2679384,4.57690822 38.6955822,4.60694932 39.0030616,4.37722329 C39.7770616,3.79701781 40.7383767,3.45360685 41.7798014,3.45360685 C44.3391849,3.45360685 46.4149658,5.52879863 46.4149658,8.08877123 C46.4149658,9.36875753 45.8960205,10.5279904 45.057226,11.3667849 C38.6372671,17.7867438 30.063774,-0.206105479 10.6159932,9.0500863 C9.95096575,9.36699041 9.44733562,9.94719589 9.22821233,10.650511 C9.00908904,11.353826 9.0945,12.1172233 9.46382877,12.7551548 L12.8001575,18.5224562 C13.5223219,19.7712233 15.1133219,20.2082918 16.3726918,19.5037986 L16.4557466,19.4572644 L16.3891849,19.5037986 L17.8688562,18.6761959 C17.8688562,18.6761959 20.4117466,17.1358534 22.5269932,15.2014425 C22.8238699,14.9304836 23.2756644,14.9151685 23.5896233,15.1684562 L23.5931575,15.1708123 L23.5984589,15.1755247 C23.771637,15.3151274 23.8758973,15.5236479 23.8829658,15.7468945 C23.8894452,15.9701411 23.7981438,16.1845521 23.6332123,16.3347575 C21.9756507,17.846237 20.0035411,19.2293055 18.6911575,20.0286342 L18.6416781,20.0574973 L17.1625959,20.8851 C16.5170068,21.2467712 15.8125137,21.4181822 15.1162671,21.4181822 C13.6536781,21.4181822 12.2252534,20.6612644 11.4471301,19.3153055 L8.29104795,13.8713877 C2.2374726,18.1466479 -1.43755479,26.3873329 0.536321918,36.8104151 C0.604650685,37.1732644 0.921554795,37.4371548 1.2914726,37.4371548 L4.8805,37.4371548 C5.26808904,37.4371548 5.59382877,37.1491137 5.64271918,36.7650589 C5.97317123,34.1756342 8.18384247,32.1746616 10.8622123,32.1746616 C13.5405822,32.1746616 15.7518425,34.1756342 16.0822945,36.7650589 C16.1311849,37.1485247 16.4575137,37.4371548 16.8445137,37.4371548 L20.3440068,37.4371548 C20.7315959,37.4371548 21.0573356,37.1491137 21.106226,36.7650589 C21.4366781,34.1756342 23.6479384,32.1746616 26.3257192,32.1746616 C29.0046781,32.1746616 31.2153493,34.1756342 31.5458014,36.7650589 C31.5946918,37.1485247 31.9210205,37.4371548 32.3086096,37.4371548 L35.7639247,37.4371548 C36.183911,37.4371548 36.5261438,37.1002233 36.5332123,36.680237 C36.6133219,31.8035658 37.9268836,26.2041411 41.6761301,23.3991274 C54.6509384,13.6905521 51.2374452,5.37034658 48.2368699,2.36918219 L48.2368699,2.36918219 Z M132.822582,28.6321685 C132.822582,28.1844973 132.759555,27.7633329 132.634089,27.3669082 C132.508034,26.9704836 132.319541,26.6235384 132.068021,26.3248945 C131.815911,26.0262507 131.496651,25.7912233 131.109651,25.6186342 C130.722651,25.4460452 130.273212,25.3600452 129.760747,25.3600452 C128.762322,25.3600452 127.977719,25.6445521 127.403993,26.2129767 C126.829678,26.7819904 126.464473,27.5883877 126.306021,28.6321685 L132.822582,28.6321685 Z M126.236514,30.7161959 C126.291884,31.4524973 126.422651,32.0892507 126.627637,32.6252781 C126.832034,33.1618945 127.102993,33.6042644 127.438747,33.9535658 C127.7745,34.3034562 128.172692,34.5649904 128.635089,34.7369904 C129.095719,34.9095795 129.605829,34.9955795 130.166007,34.9955795 C130.725007,34.9955795 131.207432,34.9301959 131.61387,34.8000178 C132.018541,34.6686616 132.373144,34.5249356 132.675911,34.3664836 C132.979267,34.2080315 133.244336,34.0631274 133.473473,33.9323603 C133.701432,33.8021822 133.922911,33.7367986 134.137911,33.7367986 C134.426541,33.7367986 134.640952,33.8440041 134.781144,34.0584151 L135.773678,35.3171959 C135.391979,35.7648671 134.962568,36.1400863 134.486623,36.4428534 C134.012445,36.7462096 133.515884,36.9883055 132.997527,37.1697301 C132.480349,37.3517438 131.953747,37.4801548 131.417719,37.554963 C130.881103,37.6297712 130.362158,37.6662918 129.857938,37.6662918 C128.860692,37.6662918 127.932952,37.5007712 127.074719,37.1697301 C126.216486,36.8392781 125.471938,36.3497849 124.837541,35.7012507 C124.203144,35.0544836 123.704815,34.2516205 123.341377,33.2967849 C122.977349,32.3407712 122.795336,31.233374 122.795336,29.9751822 C122.795336,28.9956068 122.953788,28.0755247 123.271281,27.2125795 C123.588185,26.3502233 124.042336,25.600374 124.634911,24.9612644 C125.226897,24.3233329 125.949062,23.8167575 126.802582,23.4438945 C127.656103,23.0710315 128.618596,22.8843055 129.690651,22.8843055 C130.594829,22.8843055 131.428911,23.0297986 132.193486,23.3178397 C132.958062,23.6070589 133.615432,24.0294014 134.165596,24.583689 C134.715171,25.1385658 135.146938,25.8194973 135.45913,26.6258945 C135.771322,27.4317027 135.928007,28.352963 135.928007,29.3873192 C135.928007,29.9097986 135.871459,30.2614562 135.76013,30.4428808 C135.648212,30.6248945 135.433212,30.7161959 135.116308,30.7161959 L126.236514,30.7161959 Z M116.671075,37.4571822 L120.125212,37.4571822 L120.125212,16.6758123 L116.671075,16.6758123 L116.671075,37.4571822 Z M109.762212,26.7725658 C109.3705,26.2966205 108.944034,25.9614562 108.482815,25.7653055 C108.021007,25.5697438 107.524445,25.471963 106.992541,25.471963 C106.470651,25.471963 105.999418,25.5697438 105.58061,25.7653055 C105.161212,25.9614562 104.801897,26.2571548 104.503842,26.6535795 C104.20461,27.0500041 103.976651,27.5530452 103.818199,28.1638808 C103.660336,28.7741274 103.580815,29.4951137 103.580815,30.3238945 C103.580815,31.1632781 103.648555,31.8748397 103.783445,32.4568123 C103.918336,33.039963 104.11213,33.5153192 104.363651,33.8834699 C104.61576,34.2516205 104.92324,34.5178671 105.286678,34.6810315 C105.650116,34.8436068 106.055966,34.9260726 106.503637,34.9260726 C107.221089,34.9260726 107.832514,34.7770452 108.335555,34.4784014 C108.838596,34.1797575 109.314541,33.7556479 109.762212,33.2054836 L109.762212,26.7725658 Z M113.21576,16.6752233 L113.21576,37.4571822 L111.104637,37.4571822 C110.64813,37.4571822 110.358911,37.2468945 110.237568,36.8274973 L109.943048,35.4432507 C109.365788,36.1053329 108.701349,36.6407712 107.9515,37.0513329 C107.200473,37.4618945 106.326336,37.6662918 105.329089,37.6662918 C104.545664,37.6662918 103.827623,37.5037164 103.175555,37.1767986 C102.522308,36.8510589 101.960952,36.3780589 101.489719,35.7577986 C101.019075,35.1375384 100.655637,34.3706068 100.399404,33.4575932 C100.142582,32.5434014 100.01476,31.4990315 100.01476,30.3238945 C100.01476,29.2618534 100.159075,28.2740315 100.447705,27.3598397 C100.737514,26.4456479 101.152199,25.6539767 101.692938,24.9824699 C102.233089,24.310963 102.881623,23.7867164 103.636185,23.4091411 C104.391336,23.0309767 105.240144,22.8424836 106.182021,22.8424836 C106.983705,22.8424836 107.669349,22.9679493 108.237774,23.2206479 C108.806199,23.4721685 109.314541,23.8120452 109.762212,24.2408671 L109.762212,16.6752233 L113.21576,16.6752233 Z M94.1408425,31.3311548 C93.1435959,31.3782781 92.3036233,31.4642781 91.6238699,31.5903329 C90.9435274,31.7163877 90.3974863,31.8771959 89.9875137,32.0727575 C89.5769521,32.2683192 89.2836096,32.4974562 89.1063082,32.7578123 C88.9295959,33.0193466 88.8406507,33.3038534 88.8406507,33.6107438 C88.8406507,34.2174562 89.0197192,34.6509904 89.3784452,34.9113466 C89.7383493,35.1728808 90.206637,35.3030589 90.7844863,35.3030589 C91.4925137,35.3030589 92.1062945,35.175237 92.6234726,34.9184151 C93.1406507,34.6621822 93.646637,34.272826 94.1408425,33.7509356 L94.1408425,31.3311548 Z M86.2253082,25.1079356 C87.8758014,23.5976342 89.8614589,22.8424836 92.1828699,22.8424836 C93.0222534,22.8424836 93.7721027,22.9803192 94.4341849,23.2548123 C95.0956781,23.5298945 95.6558562,23.9127712 96.112363,24.4022644 C96.5688699,24.8917575 96.9164041,25.4766753 97.1549658,26.1570178 C97.3929384,26.8373603 97.5113356,27.5836753 97.5113356,28.3947849 L97.5113356,37.4571822 L95.9456644,37.4571822 C95.6181575,37.4571822 95.366637,37.4082918 95.1899247,37.3099219 C95.0126233,37.2127301 94.8736096,37.0142233 94.7705274,36.7155795 L94.4624589,35.6806342 C94.0990205,36.0075521 93.7444178,36.293826 93.3998288,36.5406342 C93.0546507,36.7880315 92.6953356,36.995374 92.3224726,37.1632507 C91.9501986,37.3311274 91.5514178,37.4595384 91.1273082,37.5478945 C90.7031986,37.6362507 90.234911,37.6804288 89.7218562,37.6804288 C89.1151438,37.6804288 88.5561438,37.5991411 88.0436781,37.4365658 C87.5306233,37.2728123 87.0876644,37.0277712 86.7148014,36.7014425 C86.3419384,36.3757027 86.0527192,35.9692644 85.8477329,35.4850726 C85.6427466,35.0002918 85.5402534,34.4365795 85.5402534,33.7933466 C85.5402534,33.4293192 85.6003356,33.068237 85.7216781,32.7089219 C85.8424315,32.3507849 86.0409384,32.007963 86.3166096,31.6810452 C86.5911027,31.3547164 86.9480616,31.047237 87.3863082,30.7580178 C87.8245548,30.4687986 88.3623493,30.2178671 89.0014589,30.0022781 C89.6399795,29.7884562 90.3833493,29.613511 91.2315685,29.4786205 C92.0803767,29.3431411 93.0505274,29.2618534 94.1408425,29.2341685 L94.1408425,28.3947849 C94.1408425,27.4346479 93.9358562,26.7230863 93.5252945,26.2618671 C93.1153219,25.8006479 92.5233356,25.5697438 91.7499247,25.5697438 C91.1903356,25.5697438 90.7261712,25.6345384 90.3574315,25.7653055 C89.9892808,25.8960726 89.6658973,26.0433329 89.3861027,26.2059082 C89.1063082,26.3690726 88.8524315,26.5157438 88.6238836,26.646511 C88.3947466,26.7772781 88.1414589,26.8420726 87.8616644,26.8420726 C87.6195685,26.8420726 87.4139932,26.7796342 87.2461164,26.6535795 C87.0782397,26.5275247 86.9433493,26.3808534 86.8408562,26.2129767 L86.2253082,25.1079356 Z M79.5691438,25.5974288 C80.016226,24.740374 80.5481301,24.0659219 81.163089,23.5764288 C81.7780479,23.0869356 82.5055137,22.8424836 83.3443082,22.8424836 C84.0063904,22.8424836 84.5377055,22.9867986 84.9388425,23.2760178 L84.7150068,25.8630863 C84.6684726,26.030963 84.6007329,26.1499493 84.5123767,26.2200452 C84.4234315,26.2901411 84.3050342,26.3248945 84.1560068,26.3248945 C84.0158151,26.3248945 83.8084726,26.3019219 83.5333904,26.2547986 C83.2588973,26.2088534 82.9908836,26.1847027 82.7287603,26.1847027 C82.3470616,26.1847027 82.0071849,26.2406616 81.7079521,26.3525795 C81.4098973,26.4650863 81.1418836,26.6258945 80.903911,26.8350041 C80.6659384,27.0447027 80.4568288,27.2991685 80.274226,27.5972233 C80.0933904,27.8958671 79.9231575,28.2357438 79.7641164,28.6186205 L79.7641164,37.4571822 L76.3105685,37.4571822 L76.3105685,23.1081411 L78.3380479,23.1081411 C78.6920616,23.1081411 78.9400479,23.1717575 79.0790616,23.2972233 C79.2192534,23.4232781 79.3123219,23.6488808 79.3588562,23.9752096 L79.5691438,25.5974288 Z M73.4289795,27.3180178 L73.4289795,35.4986205 C72.4034589,36.2543603 71.3107877,36.8062918 70.1491986,37.1561822 C68.9887877,37.5060726 67.7465,37.6804288 66.4223356,37.6804288 C64.7718425,37.6804288 63.2786233,37.4241959 61.9403219,36.9117301 C60.6020205,36.3986753 59.4598699,35.6859356 58.5138699,34.7717438 C57.5678699,33.8575521 56.8380479,32.767826 56.3249932,31.4990315 C55.8125274,30.2314151 55.5557055,28.8471685 55.5557055,27.3457027 C55.5557055,25.8265658 55.8025137,24.4323055 56.2967192,23.1641 C56.7915137,21.8964836 57.4936507,20.8055795 58.4019521,19.8913877 C59.3108425,18.978374 60.4135274,18.2691685 61.7100068,17.7655384 C63.0053082,17.2624973 64.4602397,17.0109767 66.0724452,17.0109767 C66.8929795,17.0109767 67.659911,17.0763603 68.3738288,17.2065384 C69.0865685,17.3373055 69.7480616,17.516374 70.3594863,17.7449219 C70.9691438,17.9740589 71.5275548,18.2509082 72.0305959,18.5766479 C72.534226,18.9035658 72.9948562,19.2622918 73.4154315,19.6540041 L72.3380753,21.3598671 C72.1707877,21.630826 71.9510753,21.7963466 71.6801164,21.8564288 C71.4103356,21.917689 71.1164041,21.8493603 70.800089,21.6537986 C70.4926096,21.4770863 70.1845411,21.2997849 69.8770616,21.1224836 C69.5695822,20.9451822 69.2255822,20.7920315 68.8485959,20.6606753 C68.4710205,20.5304973 68.046911,20.4232918 67.5762671,20.3390589 C67.1050342,20.2560041 66.5625274,20.2130041 65.9469795,20.2130041 C64.9491438,20.2130041 64.0473219,20.3808808 63.2409247,20.7172233 C62.4345274,21.0523877 61.7465274,21.5330452 61.1775137,22.1568397 C60.6096781,22.7824014 60.1708425,23.5328397 59.863363,24.4087438 C59.5558836,25.285826 59.4021438,26.2642233 59.4021438,27.3457027 C59.4021438,28.5025795 59.5676644,29.5345795 59.8992945,30.4428808 C60.2291575,31.3523603 60.695089,32.1216479 61.297089,32.7507438 C61.8985,33.3804288 62.6236096,33.8604973 63.4712397,34.1915384 C64.3194589,34.5225795 65.266637,34.6881 66.3104178,34.6881 C67.0567329,34.6881 67.7229384,34.6085795 68.3108014,34.4501274 C68.8980753,34.2916753 69.4712123,34.0772644 70.0302123,33.8068945 L70.0302123,30.1430589 L67.4849658,30.1430589 C67.2422808,30.1430589 67.0537877,30.0747301 66.9188973,29.9398397 C66.7834178,29.8043603 66.7162671,29.6388397 66.7162671,29.4432781 L66.7162671,27.3180178 L73.4289795,27.3180178 Z" id="Fill-1" fill="#02303A" mask="url(#mask-2)"></path> </g> </g> </g> </svg></a> <button type="button" class="site-header__navigation-button hamburger"> <span class="hamburger__bar"></span> <span class="hamburger__bar"></span> <span class="hamburger__bar"></span> </button> </div> <div class="site-header__navigation-collapsible site-header__navigation-collapsible--collapse"> <ul class="site-header__navigation-items"> <li class="site-header__navigation-item" itemprop="name"> <a class="site-header__navigation-link active" href="https://gradle.org/" target="_blank" itemprop="url"> Main Site </a> </li> <li class="site-header__navigation-item site-header__navigation-submenu-section" tabindex="0"> <span class="site-header__navigation-link "> Key Features <img class="site-header__down-arrow site-header__icon-light" src="https://blog.gradle.org/images/collapse-light.svg" alt="More on Key Features"> </span> <div class="site-header__navigation-submenu"> <div class="site-header__navigation-submenu-item" itemprop="name"> <a class="site-header__navigation-submenu-item-link" href="https://gradle.org/features" itemprop="url"> <span class="site-header__navigation-submenu-item-link-text">Features Overview</span> </a> </div> <div class="site-header__navigation-submenu-item" itemprop="name"> <a class="site-header__navigation-submenu-item-link" href="https://docs.gradle.org/current/userguide/build_cache.html" itemprop="url"> <span class="site-header__navigation-submenu-item-link-text">- Build Cache</span> </a> </div> <div class="site-header__navigation-submenu-item" itemprop="name"> <a class="site-header__navigation-submenu-item-link" href="https://docs.gradle.org/current/userguide/configuration_cache.html" itemprop="url"> <span class="site-header__navigation-submenu-item-link-text">- Configuration Cache</span> </a> </div> <div class="site-header__navigation-submenu-item" itemprop="name"> <a class="site-header__navigation-submenu-item-link" href="https://gradle.github.io/community/declarative-gradle/" itemprop="url"> <span class="site-header__navigation-submenu-item-link-text">- Declarative Gradle (Alpha)</span> </a> </div> <div class="site-header__navigation-submenu-item" itemprop="name"> <a class="site-header__navigation-submenu-item-link" href="https://scans.gradle.com/" target="_blank" itemprop="url"> <span class="site-header__navigation-submenu-item-link-text">- Gradle Build Scan</span> </a> </div> <div class="site-header__navigation-submenu-item" itemprop="name"> <a class="site-header__navigation-submenu-item-link" href="https://plugins.gradle.org" target="_blank" itemprop="url"> <span class="site-header__navigation-submenu-item-link-text">Plugins</span> </a> </div> <div class="site-header__navigation-submenu-item" itemprop="name"> <a class="site-header__navigation-submenu-item-link" href="https://docs.gradle.org/current/userguide/gradle_ides.html" itemprop="url"> <span class="site-header__navigation-submenu-item-link-text">IDE Integrations</span> </a> </div> </div> </li> <li class="site-header__navigation-item site-header__navigation-submenu-section" tabindex="0"> <span class="site-header__navigation-link "> Docs <img class="site-header__down-arrow site-header__icon-light" src="https://blog.gradle.org/images/collapse-light.svg" alt="More on Docs"> </span> <div class="site-header__navigation-submenu"> <div class="site-header__navigation-submenu-item" itemprop="name"> <a class="site-header__navigation-submenu-item-link" href="https://docs.gradle.org/current/userguide/userguide.html" itemprop="url"> <span class="site-header__navigation-submenu-item-link-text">User Guide</span> </a> </div> <div class="site-header__navigation-submenu-item" itemprop="name"> <a class="site-header__navigation-submenu-item-link" href="https://docs.gradle.org/current/userguide/gradle_basics.html" itemprop="url"> <span class="site-header__navigation-submenu-item-link-text">Gradle Basics</span> </a> </div> <div class="site-header__navigation-submenu-item" itemprop="name"> <a class="site-header__navigation-submenu-item-link" href="https://docs.gradle.org/current/userguide/installation.html" itemprop="url"> <span class="site-header__navigation-submenu-item-link-text">Installing Gradle</span> </a> </div> <div class="site-header__navigation-submenu-item" itemprop="name"> <a class="site-header__navigation-submenu-item-link" href="https://blog.gradle.org/kotlin" itemprop="url"> <span class="site-header__navigation-submenu-item-link-text">- Gradle and Kotlin</span> </a> </div> <div class="site-header__navigation-submenu-item" itemprop="name"> <a class="site-header__navigation-submenu-item-link" href="https://developer.android.com/build" target="_blank" itemprop="url"> <span class="site-header__navigation-submenu-item-link-text">- Gradle for Android</span> </a> </div> <div class="site-header__navigation-submenu-item" itemprop="name"> <a class="site-header__navigation-submenu-item-link" href="https://docs.gradle.org/current/userguide/building_cpp_projects.html" itemprop="url"> <span class="site-header__navigation-submenu-item-link-text">- Gradle for C++/Swift</span> </a> </div> <div class="site-header__navigation-submenu-item" itemprop="name"> <a class="site-header__navigation-submenu-item-link" href="https://blog.gradle.org/maven-vs-gradle" itemprop="url"> <span class="site-header__navigation-submenu-item-link-text">- Gradle and Apache Maven</span> </a> </div> <div class="site-header__navigation-submenu-item" itemprop="name"> <a class="site-header__navigation-submenu-item-link" href="https://blog.gradle.org/releases" itemprop="url"> <span class="site-header__navigation-submenu-item-link-text">Gradle Releases</span> </a> </div> <div class="site-header__navigation-submenu-item" itemprop="name"> <a class="site-header__navigation-submenu-item-link" href="https://docs.gradle.org/current/userguide/dependency_management_terminology.html" itemprop="url"> <span class="site-header__navigation-submenu-item-link-text">Glossary</span> </a> </div> </div> </li> <li class="site-header__navigation-item site-header__navigation-submenu-section" tabindex="0"> <span class="site-header__navigation-link "> Learn <img class="site-header__down-arrow site-header__icon-light" src="https://blog.gradle.org/images/collapse-light.svg" alt="More on Learn"> </span> <div class="site-header__navigation-submenu"> <div class="site-header__navigation-submenu-item" itemprop="name"> <a class="site-header__navigation-submenu-item-link" href="https://docs.gradle.org/current/userguide/getting_started_eng.html" itemprop="url"> <span class="site-header__navigation-submenu-item-link-text">Getting Started</span> </a> </div> <div class="site-header__navigation-submenu-item" itemprop="name"> <a class="site-header__navigation-submenu-item-link" href="https://dpeuniversity.gradle.com/" target="_blank" itemprop="url"> <span class="site-header__navigation-submenu-item-link-text">DPE University</span> </a> </div> <div class="site-header__navigation-submenu-item" itemprop="name"> <a class="site-header__navigation-submenu-item-link" href="https://dpeuniversity.gradle.com/" target="_blank" itemprop="url"> <span class="site-header__navigation-submenu-item-link-text">Gradle Build Tool Courses</span> </a> </div> <div class="site-header__navigation-submenu-item" itemprop="name"> <a class="site-header__navigation-submenu-item-link" href="https://gradle.com/training/" target="_blank" itemprop="url"> <span class="site-header__navigation-submenu-item-link-text">Live Trainings</span> </a> </div> </div> </li> <li class="site-header__navigation-item site-header__navigation-submenu-section" tabindex="0"> <span class="site-header__navigation-link "> Get Help <img class="site-header__down-arrow site-header__icon-light" src="https://blog.gradle.org/images/collapse-light.svg" alt="More on Get Help"> </span> <div class="site-header__navigation-submenu"> <div class="site-header__navigation-submenu-item" itemprop="name"> <a class="site-header__navigation-submenu-item-link" href="https://blog.gradle.org/help" itemprop="url"> <span class="site-header__navigation-submenu-item-link-text">Search for Issues</span> </a> </div> <div class="site-header__navigation-submenu-item" itemprop="name"> <a class="site-header__navigation-submenu-item-link" href="https://blog.gradle.org/slack-invite" target="_blank" itemprop="url"> <span class="site-header__navigation-submenu-item-link-text">Community Slack</span> </a> </div> <div class="site-header__navigation-submenu-item" itemprop="name"> <a class="site-header__navigation-submenu-item-link" href="https://discuss.gradle.org/" target="_blank" itemprop="url"> <span class="site-header__navigation-submenu-item-link-text">Community Forums</span> </a> </div> <div class="site-header__navigation-submenu-item" itemprop="name"> <a class="site-header__navigation-submenu-item-link" href="https://stackoverflow.com/questions/tagged/gradle" target="_blank" itemprop="url"> <span class="site-header__navigation-submenu-item-link-text">Stack Overflow</span> </a> </div> <div class="site-header__navigation-submenu-item" itemprop="name"> <a class="site-header__navigation-submenu-item-link" href="https://blog.gradle.org/services" itemprop="url"> <span class="site-header__navigation-submenu-item-link-text">Commercial Services</span> </a> </div> </div> </li> <li class="site-header__navigation-item site-header__navigation-submenu-section" tabindex="0"> <span class="site-header__navigation-link "> Community <img class="site-header__down-arrow site-header__icon-light" src="https://blog.gradle.org/images/collapse-light.svg" alt="More on Community"> </span> <div class="site-header__navigation-submenu"> <div class="site-header__navigation-submenu-item" itemprop="name"> <a class="site-header__navigation-submenu-item-link" href="https://newsletter.gradle.org" itemprop="url"> <span class="site-header__navigation-submenu-item-link-text">Newsletter</span> </a> </div> <div class="site-header__navigation-submenu-item" itemprop="name"> <a class="site-header__navigation-submenu-item-link" href="https://blog.gradle.org" itemprop="url"> <span class="site-header__navigation-submenu-item-link-text">Blog</span> </a> </div> <div class="site-header__navigation-submenu-item" itemprop="name"> <a class="site-header__navigation-submenu-item-link" href="https://blog.gradle.org/slack-invite" target="_blank" itemprop="url"> <span class="site-header__navigation-submenu-item-link-text">Community Slack</span> </a> </div> <div class="site-header__navigation-submenu-item" itemprop="name"> <a class="site-header__navigation-submenu-item-link" href="https://blog.gradle.org/fellowship" itemprop="url"> <span class="site-header__navigation-submenu-item-link-text">Gradle Fellowship</span> </a> </div> <div class="site-header__navigation-submenu-item" itemprop="name"> <a class="site-header__navigation-submenu-item-link" href="https://github.com/gradle/" target="_blank" itemprop="url"> <span class="site-header__navigation-submenu-item-link-text">- GitHub</span> </a> </div> <div class="site-header__navigation-submenu-item" itemprop="name"> <a class="site-header__navigation-submenu-item-link" href="https://discuss.gradle.org/" target="_blank" itemprop="url"> <span class="site-header__navigation-submenu-item-link-text">- Community Forums</span> </a> </div> <div class="site-header__navigation-submenu-item" itemprop="name"> <a class="site-header__navigation-submenu-item-link" href="https://twitter.com/gradle" target="_blank" itemprop="url"> <span class="site-header__navigation-submenu-item-link-text">- X/Twitter</span> </a> </div> <div class="site-header__navigation-submenu-item" itemprop="name"> <a class="site-header__navigation-submenu-item-link" href="https://www.linkedin.com/company/gradle" target="_blank" itemprop="url"> <span class="site-header__navigation-submenu-item-link-text">- LinkedIn</span> </a> </div> <div class="site-header__navigation-submenu-item" itemprop="name"> <a class="site-header__navigation-submenu-item-link" href="https://mastodon.social/@Gradle" target="_blank" itemprop="url"> <span class="site-header__navigation-submenu-item-link-text">- Mastodon</span> </a> </div> <div class="site-header__navigation-submenu-item" itemprop="name"> <a class="site-header__navigation-submenu-item-link" href="https://www.youtube.com/channel/@GradleInc" target="_blank" itemprop="url"> <span class="site-header__navigation-submenu-item-link-text">- YouTube</span> </a> </div> <div class="site-header__navigation-submenu-item" itemprop="name"> <a class="site-header__navigation-submenu-item-link" href="https://blog.gradle.org/resources" itemprop="url"> <span class="site-header__navigation-submenu-item-link-text">More Resources</span> </a> </div> </div> </li> <li class="site-header__navigation-item site-header__navigation-submenu-section" tabindex="0"> <span class="site-header__navigation-link "> Gradle Inc. <img class="site-header__down-arrow site-header__icon-light" src="https://blog.gradle.org/images/collapse-light.svg" alt="More on Gradle Inc."> </span> <div class="site-header__navigation-submenu"> <div class="site-header__navigation-submenu-item" itemprop="name"> <a class="site-header__navigation-submenu-item-link" href="https://gradle.com/develocity" target="_blank" itemprop="url"> <span class="site-header__navigation-submenu-item-link-text">Develocity</span> </a> </div> <div class="site-header__navigation-submenu-item" itemprop="name"> <a class="site-header__navigation-submenu-item-link" href="https://scans.gradle.com/" target="_blank" itemprop="url"> <span class="site-header__navigation-submenu-item-link-text">Gradle Build Scan</span> </a> </div> <div class="site-header__navigation-submenu-item" itemprop="name"> <a class="site-header__navigation-submenu-item-link" href="https://dpeuniversity.gradle.com/" target="_blank" itemprop="url"> <span class="site-header__navigation-submenu-item-link-text">DPE University</span> </a> </div> <div class="site-header__navigation-submenu-item" itemprop="name"> <a class="site-header__navigation-submenu-item-link" href="https://gradle.com/training/" target="_blank" itemprop="url"> <span class="site-header__navigation-submenu-item-link-text">Events</span> </a> </div> <div class="site-header__navigation-submenu-item" itemprop="name"> <a class="site-header__navigation-submenu-item-link" href="https://gradle.com/careers/?_ga=2.256030216.287138346.1663079591-294412720.1663079591" target="_blank" itemprop="url"> <span class="site-header__navigation-submenu-item-link-text">We Are Hiring!</span> </a> </div> </div> </li> </ul> </div> <!-- TODO <li class="site-header__navigation-item"> <a class="site-header__navigation-link" title="Gradle on GitHub" href="https://github.com/gradle/gradle"><svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><title>github</title><path d="M10 0C4.477 0 0 4.477 0 10c0 4.418 2.865 8.166 6.839 9.489.5.092.682-.217.682-.482 0-.237-.008-.866-.013-1.7-2.782.603-3.369-1.342-3.369-1.342-.454-1.155-1.11-1.462-1.11-1.462-.908-.62.069-.608.069-.608 1.003.07 1.531 1.03 1.531 1.03.892 1.529 2.341 1.087 2.91.831.092-.646.35-1.086.636-1.336-2.22-.253-4.555-1.11-4.555-4.943 0-1.091.39-1.984 1.029-2.683-.103-.253-.446-1.27.098-2.647 0 0 .84-.268 2.75 1.026A9.578 9.578 0 0 1 10 4.836c.85.004 1.705.114 2.504.337 1.909-1.294 2.747-1.026 2.747-1.026.546 1.377.203 2.394.1 2.647.64.699 1.028 1.592 1.028 2.683 0 3.842-2.339 4.687-4.566 4.935.359.309.678.919.678 1.852 0 1.336-.012 2.415-.012 2.743 0 .267.18.579.688.481C17.137 18.163 20 14.418 20 10c0-5.523-4.478-10-10-10" fill="#02303A" fill-rule="evenodd"/></svg></a> </li> --> </nav> </header> <div class="container"> <div class="content-container"> <main class="content"> <article class="post"> <h1 class="post-title"> Road to Gradle 9 with Louis Jacomet </h1> <div class="post-meta"> <div class="post-date"> <svg width="16px" height="16px" viewBox="0 0 16 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" class="calendar-icon"> <style>.b{fill:#02303A;}</style> <title>Calendar</title> <defs> <path d="M0,13.8172697 L0,1.20148026 C0,0.548613158 0.504,0.01875 1.125,0.01875 L13.875,0.01875 C14.496,0.01875 15,0.548613158 15,1.20148026 L15,13.8172697 C15,14.4701368 14.496,15 13.875,15 L1.125,15 C0.504,15 0,14.4701368 0,13.8172697 L0,13.8172697 Z" id="path-cal"></path> <mask id="mask-cal" maskContentUnits="userSpaceOnUse" maskUnits="objectBoundingBox" x="0" y="0" width="15" height="14.98125" fill="white"> <use xlink:href="#path-cal"></use> </mask> </defs> <g stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> <g> <rect class="b" x="0" y="4" width="15" height="1"></rect> <use stroke="#02303A" mask="url(#mask-cal)" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" xlink:href="#path-cal"></use> <rect class="b" x="2" y="12" width="1" height="1"></rect> <rect class="b" x="2" y="10" width="1" height="1"></rect> <rect class="b" x="2" y="8" width="1" height="1"></rect> <rect class="b" x="4" y="12" width="1" height="1"></rect> <rect class="b" x="4" y="10" width="1" height="1"></rect> <rect class="b" x="4" y="8" width="1" height="1"></rect> <rect class="b" x="6" y="12" width="1" height="1"></rect> <rect class="b" x="6" y="10" width="1" height="1"></rect> <rect class="b" x="6" y="8" width="1" height="1"></rect> <rect class="b" x="6" y="6" width="1" height="1"></rect> <rect class="b" x="8" y="12" width="1" height="1"></rect> <rect class="b" x="8" y="10" width="1" height="1"></rect> <rect class="b" x="8" y="8" width="1" height="1"></rect> <rect class="b" x="8" y="6" width="1" height="1"></rect> <rect class="b" x="10" y="10" width="1" height="1"></rect> <rect class="b" x="10" y="8" width="1" height="1"></rect> <rect class="b" x="10" y="6" width="1" height="1"></rect> <rect class="b" x="12" y="10" width="1" height="1"></rect> <rect class="b" x="12" y="8" width="1" height="1"></rect> <rect class="b" x="12" y="6" width="1" height="1"></rect> </g> </g> </svg> <time datetime="2024-06-18T00:00:00-04:00">June 18, 2024</time> </div> <div class="post-author"> <img class="post-meta-icon" src="https://avatars.githubusercontent.com/u/3000480?v=3&s=36" width="18" height="18"> <a href="https://github.com/oleg-nenashev">Oleg Nenashev</a> </div> <div class="post-category"> <svg width="16px" height="16px" class="category-features-icon" viewBox="0 0 16 14" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <g stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> <g stroke="#02303A"> <polygon points="8 11.8621259 4.29179607 14 5.07962329 9.63115665 2 6.58359214 6.19510793 6.02137251 8 2 9.80489207 6.02137251 14 6.58359214 10.9203767 9.63115665 11.7082039 14"></polygon> </g> </g> </svg> <a style="margin-left: 4px;" href="https://blog.gradle.org/category/features">New Features</a> </div> </div> <div class="post-summary"> At Devoxx France, we discussed the upcoming Gradle 9 release with Louis Jacomet, a tech lead at Gradle </div> <div id="table-of-contents" class="post-toc"> <h2>Table of Contents</h2> <ul><li><a href="#a-busy-day-at-devoxx-fr">A Busy Day at Devoxx FR</a></li><li><a href="#key-areas-in-gradle-9">Key Areas in Gradle 9</a><ul class="toc-list"><li><a href="#configuration-cache-improvements">Configuration Cache Improvements</a></li><li><a href="#isolated-projects-for-faster-configuration">Isolated Projects for Faster Configuration</a></li><li><a href="#kotlin-20-integration">Kotlin 2.0 Integration</a></li><li><a href="#lazy-apis-and-bytecode-transforms">Lazy APIs and Bytecode Transforms</a></li></ul></li><li><a href="#java-version-support">Java Version Support</a></li><li><a href="#sharing-feedback">Sharing Feedback</a></li><li><a href="#wrapping-up">Wrapping Up</a></li><li><a href="#references">References</a></li></ul> </div> <h2>Introduction</h2> <p>At Devoxx France, we sat down with Louis Jacomet, a tech lead at Gradle Inc. Louis leads the Gradle Build Tool support team and coordinates releases, so you can often see him active on GitHub issues and speaking at Gradle conferences. Let’s dive into what Louis shares about the upcoming Gradle 9 release!</p> <p><img src="https://blog.gradle.org/images/2024/road-to-gradle-9/image5.png" alt="alt_text" title="image_tooltip" /></p> <h2 id="a-busy-day-at-devoxx-fr"> A Busy Day at Devoxx FR <a href="#a-busy-day-at-devoxx-fr" class="header-anchor">#</a> </h2> <p>Louis had a packed schedule on Friday at Devoxx FR, with 4 hours of talks lined up. He did a session with Hervé Boutemy from the Apache Maven community on navigating the labyrinth of dependency management, which was a 1-hour talk. He also had a separate discussion with his colleague Paul Merlin about the upcoming features in Gradle 9.</p> <p>Preparing for so many talks at once is no small feat. As Louis puts it: <em>Thinking about what you want to say, organizing it, having cool demos, and making it interesting for the audience. Yeah, it’s work.</em> At the conference, Maven and Gradle folks worked together to share tips and best practices on dependency management in both systems. See the talk by Louis and Hervé Boutemy <a href="https://www.devoxx.fr/schedule/talk/?id=44907">here</a> (in French):</p> <p><img src="https://blog.gradle.org/images/2024/road-to-gradle-9/image1.png" alt="alt_text" title="image_tooltip" /></p> <h2 id="key-areas-in-gradle-9"> Key Areas in Gradle 9 <a href="#key-areas-in-gradle-9" class="header-anchor">#</a> </h2> <p>So what can we expect in Gradle 9? Louis outlined a few key areas they’re focusing on for this next major version of Gradle:</p> <ul> <li>🚀 Performance</li> <li>💡 Comprehensibility</li> <li>🐘 Support for modern Java and Kotlin versions</li> </ul> <h3 id="configuration-cache-improvements"> Configuration Cache Improvements <a href="#configuration-cache-improvements" class="header-anchor">#</a> </h3> <p>One major focus is continuing the work on the Configuration Cache, which was marked stable in Gradle 8.1. In Gradle 9.0, the Configuration Cache will be the preferred mode of execution, and turning it off will be deprecated. This means every build should use the Configuration Cache feature, speeding up the configuration phase and making builds faster overall.</p> <p><img src="https://blog.gradle.org/images/2024/road-to-gradle-9/image3.png" alt="alt_text" title="image_tooltip" /></p> <p>Gradle configuration is a significant part of the build, hence the Configuration Cache improvements.</p> <p>However, this necessitates considerable effort on internal Gradle plugins and accommodating use cases that aren’t always compatible. This is particularly true for community plugins. The Gradle team will continue collaborating with the community on this.</p> <p>There’s a <a href="https://github.com/gradle/gradle/issues/13490">GitHub issue</a> with a list of known compatible plugins and compatibility issues, including all the most popular plugins. Louis encourages the community to check it out and mention your favorite plugin if it’s incompatible.</p> <h3 id="isolated-projects-for-faster-configuration"> Isolated Projects for Faster Configuration <a href="#isolated-projects-for-faster-configuration" class="header-anchor">#</a> </h3> <p>Configuration Cache is great if you get a cache hit, but you still have to go through the configuration phase if you don’t. The next step for the Gradle team is <a href="https://docs.gradle.org/current/userguide/isolated_projects.html">Isolated Projects</a>.</p> <p>Due to Gradle’s history and mutable model, whenever you make a change, you effectively have to rerun the whole configuration. It can be a problem for multi-module builds, even if some have no changes. Android Studio is notoriously known for taking a long time to synchronize Gradle projects because of it.</p> <p>For <a href="https://docs.gradle.org/current/userguide/isolated_projects.html">Isolated Projects</a>, the goal is to have the ability to run the configuration phase of Gradle in parallel and cache it incrementally. This will enable Gradle to rerun the configuration phase only for the affected projects whenever you modify the build logic.</p> <p>For Gradle 9, the team plans to release an incubating version for early adopters to try out. You can also report issues and request support for additional patterns during incubation.</p> <h3 id="kotlin-20-integration"> Kotlin 2.0 Integration <a href="#kotlin-20-integration" class="header-anchor">#</a> </h3> <p>The Gradle team is looking to have Kotlin 2.0 integrated into Gradle 9 and to leverage the K2 compiler to speed up Kotlin build script compiling. Gradle participated in the Kotlin 2.0 Early-Access Program organized by JetBrains and the Kotlin Foundation.</p> <p>Gradle was highlighted among other Kotlin 2 EAP Champions at the KotlinConf opening Keynote. Photo by <a href="https://kotlinconf.com/2019/speakers/a44e9e9d-07e2-40ce-9c0e-0f236d4788a6/">Qian Jin</a>:</p> <p><img src="https://blog.gradle.org/images/2024/road-to-gradle-9/image2.png" alt="alt_text" title="Kotlin 2 EAP Champions highlighted at the KotlinConf opening Keynote. Photo by Qian Jin" /></p> <p>Normally, Gradle can’t do major upgrades of Kotlin outside of a major upgrade of Gradle because it impacts compatibility. So Kotlin 2.0 will be coming with Gradle 9. We already have experimental builds with Kotlin 2.0 support, so nightly builds might become available earlier.</p> <h3 id="lazy-apis-and-bytecode-transforms"> Lazy APIs and Bytecode Transforms <a href="#lazy-apis-and-bytecode-transforms" class="header-anchor">#</a> </h3> <p>Gradle has been promoting a set of lazy APIs for some time. These APIs aim to resolve evaluation and execution ordering (as in the Provider API) and allow for late evaluation of properties, enabling you to configure dependencies during the configuration phase and obtain the correct value during execution.</p> <div class="language-kotlin highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kd">interface</span> <span class="nc">Extension</span> <span class="p">{</span> <span class="kd">val</span> <span class="py">description</span><span class="p">:</span> <span class="nc">Property</span><span class="p"><</span><span class="nc">String</span><span class="p">></span> <span class="p">}</span> <span class="c1">// register "extension" with type Extension</span> <span class="nf">extension</span> <span class="p">{</span> <span class="c1">// Using the set() method call</span> <span class="n">description</span><span class="p">.</span><span class="k">set</span><span class="p">(</span><span class="s">"Hello Property"</span><span class="p">)</span> <span class="c1">// Using lazy property assignment</span> <span class="n">description</span> <span class="p">=</span> <span class="s">"Hello Property"</span> <span class="p">}</span> </code></pre></div></div> <p>For Gradle 9, a significant migration to the new API is planned, ensuring that existing plugins can still be applied. The idea is to use bytecode transforms behind the scenes, allowing plugins targeting old-style getters and setters to work transparently with the provider API.</p> <p>Until now, Gradle has been migrating properties one by one, which involves finding a new name, introducing it, deprecating the old one, and eventually removing the old one in the next major version. This is a lengthy and disruptive process. With Gradle 9, the team aims to make one final, significant change to streamline this process. Due to its complexity, it is still uncertain whether automatic compatibility can be offered to plugin authors.</p> <p><img src="https://blog.gradle.org/images/2024/road-to-gradle-9/image4.png" alt=""Paul Merlin and presenting on Gradle 9 and Lazy API"" title="Paul Merlin and presenting on Gradle 9 and Lazy API" /></p> <h2 id="java-version-support"> Java Version Support <a href="#java-version-support" class="header-anchor">#</a> </h2> <p>Gradle aims to keep up with new Java versions. In Gradle 8.7, you can use Java 22 through the toolchain mechanism to compile, run, and test tools. However, Gradle relies on Groovy and Kotlin, which also need to support Java 22. Full support for Java 22 will be available in Gradle 8.8.</p> <p>For Java 23, the Gradle team is proactively exploring ways to provide support as early as possible, understanding that users may want to try early access features of upcoming Java versions. Given the current timeline, Java 23 support is likely to be available in the 9.0 release.</p> <h2 id="sharing-feedback"> Sharing Feedback <a href="#sharing-feedback" class="header-anchor">#</a> </h2> <p>When asked if he has any tips or advice to communicate to Gradle users, Louis highlights the importance of user feedback:</p> <blockquote> <p>If you struggle with a topic, you don’t find the right documentation. Let us know. That’s something compared to some other bug fixes and feature requests. It is often easier to move forward with and can help others with the same challenges.</p> </blockquote> <p>The Gradle team has started a few initiatives to improve documentation:</p> <ul> <li>A new feedback form has been implemented that allows you to submit GitHub issues immediately. Soon, you will be able to edit and submit pull requests from the documentation directly</li> <li>More velocity for documentation updates so that every pull request merged will show up in the current version that evening</li> <li>Major documentation initiatives, including the new <a href="https://community.gradle.org/cookbook/">Gradle Cookbook</a></li> </ul> <p>Any contributions and reports related to documentation are very welcome!</p> <h2 id="wrapping-up"> Wrapping Up <a href="#wrapping-up" class="header-anchor">#</a> </h2> <p>It’s exciting to hear about all the improvements and new features coming in Gradle 9, from Configuration Cache enhancements to Isolated Projects, Kotlin 2.0 integration, lazy APIs, and better Java version support. A huge thanks to Louis for sharing these insights amidst his busy schedule at Devoxx FR. We look forward to seeing Gradle 9 release candidates and features soon.</p> <p>To learn more about the initiatives in Gradle, check out the <a href="https://community.gradle.org/roadmap/">Gradle Build Tool roadmap</a>. We have a lot more going on there in addition to Gradle 9.</p> <p>As always, the Gradle community’s feedback and contributions are invaluable. So try out the new features, report any problems, and let the Gradle team know if you want something documented. Together, we can make Gradle 9 the best release yet!</p> <h2 id="references"> References <a href="#references" class="header-anchor">#</a> </h2> <p>Talk by Louis:</p> <ul> <li>Talk page (in French): <a href="https://www.devoxx.fr/schedule/talk/?id=40282">https://www.devoxx.fr/schedule/talk/?id=40282</a></li> <li>Build Propulsion Lab interview: <a href="https://www.youtube.com/watch?v=zCxXUKTSjdA">https://www.youtube.com/watch?v=zCxXUKTSjdA</a></li> <li>Video by Louis from Jfokus: <a href="https://www.youtube.com/watch?v=uIq5X7Ty0_0">https://www.youtube.com/watch?v=uIq5X7Ty0_0</a></li> <li>Slides from the presentation: <a href="https://jacomet.dev/devoxxfr-gradle9/">https://jacomet.dev/devoxxfr-gradle9/</a></li> </ul> <h2>Discuss</h2> <div id='discourse-comments'></div> <script type="text/javascript"> DiscourseEmbed = { discourseUrl: 'https://discuss.gradle.org/', discourseEmbedUrl: 'https://blog.gradle.org/road-to-gradle-9'}; (function() { var d = document.createElement('script'); d.type = 'text/javascript'; d.async = true; d.src = DiscourseEmbed.discourseUrl + 'javascripts/embed.js'; (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(d); })(); </script> <div class="related-posts"> <h3 class="related-posts__title">Related Posts</h3> <ul class="related-posts__posts"> <li class="related-posts__post"> ❯ <a href="https://blog.gradle.org/declarative-gradle-november-2024-update">Declarative Gradle - November 2024 Update</a> <time class="related-posts__post-date">Nov 2024</time> </li> <li class="related-posts__post"> ❯ <a href="https://blog.gradle.org/declarative-gradle-first-eap">First look at Declarative Gradle</a> <time class="related-posts__post-date">Jul 2024</time> </li> <li class="related-posts__post"> ❯ <a href="https://blog.gradle.org/gradle-github-partnership-supply-chain-security">Gradle partners with GitHub on supply chain security</a> <time class="related-posts__post-date">Apr 2024</time> </li> </ul> </div> </article> <div id="disqus_thread" class="comments-container"></div> <script type="application/ld+json"> { "@context": "http://schema.org", "@type": "BlogPosting", "mainEntityOfPage": { "@type": "WebPage" }, "headline": "Road to Gradle 9 with Louis Jacomet", "description": "At Devoxx France, we sat down with Louis Jacomet, a tech lead at Gradle Inc. Louis leads the Gradle Build Tool support team and coordinates releases, so you can often see him active on GitHub issues and spea...", "image": { "@type": "ImageObject", "url": "https://blog.gradle.org/images/2024/road-to-gradle-9/image5.png" }, "datePublished": "2024-06-18T00:00:00-04:00", "author": { "@type": "Person", "name": "Oleg Nenashev" }, "publisher": { "@type": "Organization", "name": "Gradle", "logo": { "@type": "ImageObject", "url": "https://gradle.org/images/gradle-knowledge-graph-logo.png", "width": 60, "height": 60 } } } </script> </main> <aside class="sidebar"> <div class="side-nav"> <ul class="category-list" itemscope itemtype="https://schema.org/SiteNavigationElement"> <li> <a href="https://blog.gradle.org/" itemprop="url"><span itemprop="name">All Posts</span></a> </li> <li> <a style="color: rgba(2, 48, 58, 1);" href="https://blog.gradle.org/category/features" itemprop="url"><span itemprop="name">New Features</span></a> </li> <li> <a href="https://blog.gradle.org/category/events" itemprop="url"><span itemprop="name">Events</span></a> </li> <li> <a href="https://blog.gradle.org/category/general" itemprop="url"><span itemprop="name">General</span></a> </li> <li> <a href="https://blog.gradle.org/category/security" itemprop="url"><span itemprop="name">Security</span></a> </li> </ul> <div class="subscribe-container"> <svg width="16px" height="16px" viewBox="0 0 16 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" class="icon-subscribe"> <g stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" stroke-opacity="0.5"> <g stroke="#02303A"> <path d="M2,6.5 C6.08944681,6.5 9.5,9.996 9.5,14"></path> <path d="M2,2 C8.62731915,2 14,7.511 14,14"></path> <path d="M4.80851064,12.125 C4.80851064,12.88455 4.17968511,13.5 3.40425532,13.5 C2.62854468,13.5 2,12.88455 2,12.125 C2,11.36545 2.62854468,10.75 3.40425532,10.75 C4.17968511,10.75 4.80851064,11.36545 4.80851064,12.125 L4.80851064,12.125 Z"></path> </g> </g> </svg> <a style="margin-left: 2px;" href="https://blog.gradle.org/subscribe" itemprop="url"><span itemprop="name">Subscribe</span></a> </div> </div> </aside> </div> </div> <footer class="site-layout__footer site-footer" itemscope itemtype="https://schema.org/WPFooter"> <div class="site-footer__contents"> <div class="site-footer__copy">© Gradle Inc. <time datetime="2024-11-27T11:04:36-05:00">2024</time> </div> <div class="site-footer__logo"><a href="/"><svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="0 0 90 66.06"><defs><style>.cls-1{fill:#02303a;}</style></defs><title>gradle-elephant-icon-dark-green-secondary</title><path class="cls-1" d="M85.11,4.18a14.27,14.27,0,0,0-19.83-.34,1.38,1.38,0,0,0,0,2L67,7.6a1.36,1.36,0,0,0,1.78.12A8.18,8.18,0,0,1,79.5,20.06C68.17,31.38,53.05-.36,18.73,16a4.65,4.65,0,0,0-2,6.54l5.89,10.17a4.64,4.64,0,0,0,6.3,1.73l.14-.08-.11.08L31.53,33a60.29,60.29,0,0,0,8.22-6.13,1.44,1.44,0,0,1,1.87-.06h0a1.34,1.34,0,0,1,.06,2A61.61,61.61,0,0,1,33,35.34l-.09,0-2.61,1.46a7.34,7.34,0,0,1-3.61.94,7.45,7.45,0,0,1-6.47-3.71l-5.57-9.61C4,32-2.54,46.56,1,65a1.36,1.36,0,0,0,1.33,1.11H8.61A1.36,1.36,0,0,0,10,64.87a9.29,9.29,0,0,1,18.42,0,1.35,1.35,0,0,0,1.34,1.19H35.9a1.36,1.36,0,0,0,1.34-1.19,9.29,9.29,0,0,1,18.42,0A1.36,1.36,0,0,0,57,66.06H63.1a1.36,1.36,0,0,0,1.36-1.34c.14-8.6,2.46-18.48,9.07-23.43C96.43,24.16,90.41,9.48,85.11,4.18ZM61.76,30.05l-4.37-2.19h0a2.74,2.74,0,1,1,4.37,2.2Z"/></svg></a></div> <div class="site-footer__links"> <a href="https://gradle.com/careers">Careers</a> | <a href="https://gradle.org/privacy">Privacy</a> | <a href="https://gradle.org/terms">Terms of Service</a> | <a href="https://gradle.org/contact">Contact</a> </div> </div> </footer> <script src="https://blog.gradle.org/js/site-header.js"></script> <script type="application/ld+json"> { "@context": "http://schema.org", "@type": "WebSite", "url": "https://blog.gradle.org", "name": "Gradle Blog" } </script> </body> </html>