CINXE.COM
The Gradle Blog: General
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title> The Gradle Blog: General </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: Newsletter" href="https://newsletter.gradle.org/feed.xml"> <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/category/general"> <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="The Gradle Blog"> <meta name="twitter:card" content="summary"> <meta name="twitter:site" content="@gradle"> <meta name="twitter:creator" content="@gradle"> <meta name="twitter:title" content=""> <meta name="twitter:url" content="https://blog.gradle.org/category/general"> <meta name="twitter:description" content="The Gradle Blog"> <meta name="twitter:image" content="https://blog.gradle.org/images/gradle-400x400.png"> <meta name="og:image" content="https://blog.gradle.org/images/gradle-400x400.png"> <meta name="og:description" content="The Gradle Blog"> <link rel="stylesheet" href="https://gradle.org/lib/cookie-consent-banner.css"> <script id="bt-google-tag-manager-injector" src="https://gradle.org/js/google-tag-analytics.js" consentHolderLocator="#analytics-consent-div" promo_location="bt-blog"> </script> </head> <body> <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"> <div class="posts"> <article class="post"> <h1 class="post-title"> <a href="https://blog.gradle.org/best-practices-naming-version-catalog-entries">Dependency Management - Best Practices for Naming Gradle Version Catalog Entries</a> </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-07-08T00:00:00-04:00">July 8, 2024</time> </div> <div class="post-author"> <img class="post-meta-icon" src="https://avatars.githubusercontent.com/u/1327662?v=3&s=36" width="18" height="18"> <a href="https://github.com/britter">Benedikt Ritter</a> </div> <div class="post-category"> <svg width="16px" height="16px" viewBox="0 0 16 12" class="category-general-icon" 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" stroke-linecap="round" stroke-linejoin="round"> <g stroke="#02303A"> <polygon id="Stroke-3370" points="5 2.5 0.5 2.5 0.5 13.5 15.5 13.5 15.5 4.5 7 4.5"></polygon> </g> </g> </svg> <a style="margin-left: 4px;" href="https://blog.gradle.org/category/general">General</a> </div> </div> <p><a href="https://docs.gradle.org/current/userguide/platforms.html#sub:central-declaration-of-dependencies">Version catalogs</a> are a fairly recent feature in Gradle Build Tool. They help manage dependencies by providing a standardized way of defining and accessing the catalog of dependencies used in a project—ensuring that all developers in a team are aligned on dependency names and definitions saves time and cognitive load for everyone. Like most Gradle features they are quite flexible, so users have to come up with their own conventions for how to use them.</p> <p><img src="https://blog.gradle.org/images/2024/version-catalog-naming/image1.png" alt="alt_text" title="image_tooltip" /></p> <p>In this blog post, we’re going to share some of the best-practices we employ in the <a href="https://gradle.com/develocity/">Develocity</a> team when it comes to managing dependencies using version catalogs. In particular, we’re going to look at our convention for how to derive... <p><a href="https://blog.gradle.org/best-practices-naming-version-catalog-entries">❯ Read more</a></p> </article> <article class="post"> <h1 class="post-title"> <a href="https://blog.gradle.org/portal-jcenter-impact">Impact of final JCenter shutdown on Gradle Plugin Portal</a> </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-07-05T00:00:00-04:00">July 5, 2024</time> </div> <div class="post-author"> <img class="post-meta-icon" src="https://avatars.githubusercontent.com/u/135308?v=3&s=36" width="18" height="18"> <a href="https://github.com/ljacomet">Louis Jacomet</a> </div> <div class="post-category"> <svg width="16px" height="16px" viewBox="0 0 16 12" class="category-general-icon" 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" stroke-linecap="round" stroke-linejoin="round"> <g stroke="#02303A"> <polygon id="Stroke-3370" points="5 2.5 0.5 2.5 0.5 13.5 15.5 13.5 15.5 4.5 7 4.5"></polygon> </g> </g> </svg> <a style="margin-left: 4px;" href="https://blog.gradle.org/category/general">General</a> </div> </div> <table> <thead> <tr> <th>ℹ️ Update on July 15, 2024</th> </tr> </thead> <tbody> <tr> <td>We have found errors causing false positive in failed plugin resolution. 4 plugins have been removed from the list, resulting in 9 removed dependencies. We also added 105 plugins that depend on one or more affected plugins. These will fail to resolve transitively. Not taking <code class="language-plaintext highlighter-rouge">exclude</code> into account caused the first change, the second one came from not taking plugin dependencies into account.</td> </tr> </tbody> </table> <p>Now that JFrog has confirmed that <a href="https://jfrog.com/blog/jcenter-sunset/">JCenter will become a permanent redirect to Maven Central</a>, we felt that it was important for the Gradle Plugin Portal users to understand the impact of that decision on the portal and their builds.... <p><a href="https://blog.gradle.org/portal-jcenter-impact">❯ Read more</a></p> </article> <article class="post"> <h1 class="post-title"> <a href="https://blog.gradle.org/gradles-evolution-a-conversation-with-adam-murdoch">Gradle's Evolution - A Conversation with Adam Murdoch</a> </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-12T00:00:00-04:00">June 12, 2024</time> </div> <div class="post-author"> <img class="post-meta-icon" src="https://avatars.githubusercontent.com/u/5684849?v=3&s=36" width="18" height="18"> <a href="https://github.com/lkasso">Laura Kassovic</a> </div> <div class="post-category"> <svg width="16px" height="16px" viewBox="0 0 16 12" class="category-general-icon" 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" stroke-linecap="round" stroke-linejoin="round"> <g stroke="#02303A"> <polygon id="Stroke-3370" points="5 2.5 0.5 2.5 0.5 13.5 15.5 13.5 15.5 4.5 7 4.5"></polygon> </g> </g> </svg> <a style="margin-left: 4px;" href="https://blog.gradle.org/category/general">General</a> </div> </div> <p>We had a <a href="https://www.youtube.com/watch?v=xZRR71VtmGc">conversation with Adam Murdoch</a>, the CTO of Gradle, about his journey from the very origins of Gradle. Adam offers insights into the latest features and discusses the future of build tools.</p> <iframe width="709" height="400" src="https://www.youtube.com/embed/xZRR71VtmGc?si=qkLKY3I5FF6by3z5" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen=""></iframe> <h2 id="the-genesis-of-gradle">The Genesis of Gradle</h2> <p>Adam began his journey with Gradle around 2008 while seeking a robust alternative to the Ant-based build systems that he used at the time. He recalls, “I was looking for a replacement for our Ant-based build system, came across this new tool called Gradle, started using it, [and] started sending in patches for improvements.”</p> <p>Hans Dockter, the founder of Gradle, recognized Adam’s contributions and invited him to join as a maintainer. This collaboration marked the beginning... <p><a href="https://blog.gradle.org/gradles-evolution-a-conversation-with-adam-murdoch">❯ Read more</a></p> </article> <article class="post"> <h1 class="post-title"> <a href="https://blog.gradle.org/welcome-gsoc-contributors">Welcome the Google Summer of Code contributors!</a> </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-05T00:00:00-04:00">June 5, 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" viewBox="0 0 16 12" class="category-general-icon" 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" stroke-linecap="round" stroke-linejoin="round"> <g stroke="#02303A"> <polygon id="Stroke-3370" points="5 2.5 0.5 2.5 0.5 13.5 15.5 13.5 15.5 4.5 7 4.5"></polygon> </g> </g> </svg> <a style="margin-left: 4px;" href="https://blog.gradle.org/category/general">General</a> </div> </div> <h2 id="introduction">Introduction</h2> <p>Google Summer of Code (GSoC) projects have been announced! <p><a href="https://blog.gradle.org/welcome-gsoc-contributors">❯ Read more</a></p> </article> <article class="post"> <h1 class="post-title"> <a href="https://blog.gradle.org/dpe-university-and-gradle-courses">DPE University - New Gradle Build Tool Courses</a> </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-05-28T00:00:00-04:00">May 28, 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" viewBox="0 0 16 12" class="category-general-icon" 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" stroke-linecap="round" stroke-linejoin="round"> <g stroke="#02303A"> <polygon id="Stroke-3370" points="5 2.5 0.5 2.5 0.5 13.5 15.5 13.5 15.5 4.5 7 4.5"></polygon> </g> </g> </svg> <a style="margin-left: 4px;" href="https://blog.gradle.org/category/general">General</a> </div> </div> <p>Our new learning portal, <a href="https://dpeuniversity.gradle.com/">DPE University</a>, is now live! We released the first 10 free, self-paced courses for Gradle Build Tool, Apache Maven, Develocity Build Scan, and DPE. Learn best practices with us, improve your Gradle-fu, and boost your developer productivity!</p> <p>You can find the full DPE University announcement in the <a href="https://gradle.com/blog/dpe-university-achieve-developer-productivity-engineering-mastery-with-free-self-paced-training-for-gradle-maven-and-develocity/">blogpost on gradle.com</a>. Here, we will focus on the training and content for Gradle Build Tool.</p> <p><img src="https://blog.gradle.org/images/2024/dpe-university/image3.png" alt="alt_text" title="image_tooltip" /></p> <h2 id="available-courses">Available courses</h2> <p>The initial release includes six courses for Gradle Build Tool designed to help developers and build engineers with any expertise: from beginners to seasoned maintainers of large-scale developer productivity platforms. Currently, the following courses for Gradle Build Tool are available:</p> <ol> <li><a href="https://dpeuniversity.gradle.com/app/courses/012de84f-fcd3-45d4-9c4c-284382eb3f3f">Introduction to Gradle... <p><a href="https://blog.gradle.org/dpe-university-and-gradle-courses">❯ Read more</a></p> </article> <article class="post"> <h1 class="post-title"> <a href="https://blog.gradle.org/2023-lunar-new-year">2023 Lunar Year in Review</a> </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-02-12T00:00:00-05:00">February 12, 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" viewBox="0 0 16 12" class="category-general-icon" 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" stroke-linecap="round" stroke-linejoin="round"> <g stroke="#02303A"> <polygon id="Stroke-3370" points="5 2.5 0.5 2.5 0.5 13.5 15.5 13.5 15.5 4.5 7 4.5"></polygon> </g> </g> </svg> <a style="margin-left: 4px;" href="https://blog.gradle.org/category/general">General</a> </div> </div> <p>Hi all! On behalf of the Gradle community, we wish you a Happy New Lunar Year! 2023 was a great year for Gradle Build Tool, with many new features and initiatives being released. Let’s recap the key updates:</p> <ul> <li>Gradle 8 baseline with 7 feature packed releases</li> <li>Kotlin DSL became the new default for Gradle</li> <li>Configuration Caching, Build Speed and Scalability Improvements</li> <li>Our First Google Summer of Code and Major League Hacking participation</li> <li>Gradle Enterprise renaming to Develocity, and Gradle Build Scan enhancements</li> <li>What’s next, Declarative Gradle and the road towards Gradle 9</li> </ul> <p><img src="/images/2024/lunar-new-year/image1.png" alt="2023 Lunar Year in Gradle" title="2023 Lunar Year in Gradle" /></p> <h2 id="gradle-8">Gradle 8</h2> <p>In February 2023, the Gradle team announced <a href="https://docs.gradle.org/8.0/release-notes.html">Gradle 8.0</a> - a... <p><a href="https://blog.gradle.org/2023-lunar-new-year">❯ Read more</a></p> </article> <article class="post"> <h1 class="post-title"> <a href="https://blog.gradle.org/our-approach-to-faster-compilation">An In-depth Look at Gradle's Approach to Faster Compilation</a> </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="2023-08-25T00:00:00-04:00">August 25, 2023</time> </div> <div class="post-author"> <img class="post-meta-icon" src="https://avatars.githubusercontent.com/u/2093023?v=3&s=36" width="18" height="18"> <a href="https://github.com/octylFractal">Octavia Togami</a> </div> <div class="post-category"> <svg width="16px" height="16px" viewBox="0 0 16 12" class="category-general-icon" 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" stroke-linecap="round" stroke-linejoin="round"> <g stroke="#02303A"> <polygon id="Stroke-3370" points="5 2.5 0.5 2.5 0.5 13.5 15.5 13.5 15.5 4.5 7 4.5"></polygon> </g> </g> </svg> <a style="margin-left: 4px;" href="https://blog.gradle.org/category/general">General</a> </div> </div> <p>One of many performance optimizations that make Gradle Build Tool fast and scalable is compilation avoidance. Gradle avoids recompiling as much as possible by determining if the result of compilation would be identical, even if upstream dependencies have changed.</p> <p>The situation can be illustrated like this: if classes <code class="language-plaintext highlighter-rouge">MyApp</code> and <code class="language-plaintext highlighter-rouge">NumberUtils</code> are in different projects and <code class="language-plaintext highlighter-rouge">MyApp</code>’s project depends on <code class="language-plaintext highlighter-rouge">NumberUtils</code>’s project at compile time, then any internal change to <code class="language-plaintext highlighter-rouge">NumberUtils</code> does not require <code class="language-plaintext highlighter-rouge">MyApp</code>’s project to be recompiled. Both before and after the change, <code class="language-plaintext highlighter-rouge">MyApp</code> compiles to identical bytecode, so Gradle can continue to use the <code class="language-plaintext highlighter-rouge">MyApp.class</code> file it has already built.</p> <p><img src="/images/our-approach-to-faster-compilation/myapp-recompile-diff.png" alt="A... <p><a href="https://blog.gradle.org/our-approach-to-faster-compilation">❯ Read more</a></p> </article> <article class="post"> <h1 class="post-title"> <a href="https://blog.gradle.org/plugin-portal-outage-followup">Plugin Portal Outage Followup</a> </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="2023-06-28T00:00:00-04:00">June 28, 2023</time> </div> <div class="post-author"> <img class="post-meta-icon" src="https://avatars.githubusercontent.com/u/5387972?v=3&s=36" width="18" height="18"> <a href="https://github.com/big-guy">Sterling Greene</a> </div> <div class="post-category"> <svg width="16px" height="16px" viewBox="0 0 16 12" class="category-general-icon" 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" stroke-linecap="round" stroke-linejoin="round"> <g stroke="#02303A"> <polygon id="Stroke-3370" points="5 2.5 0.5 2.5 0.5 13.5 15.5 13.5 15.5 4.5 7 4.5"></polygon> </g> </g> </svg> <a style="margin-left: 4px;" href="https://blog.gradle.org/category/general">General</a> </div> </div> <table> <thead> <tr> <th>ℹ️ Update on July 15, 2024</th> </tr> </thead> <tbody> <tr> <td>See <a href="/portal-jcenter-impact">our recent blog post</a> for up-to-date information about the Plugin Portal and JCenter.</td> </tr> </tbody> </table> <p>On June 23rd, 2023, at 9:00 UTC, Gradle users started experiencing issues resolving artifacts from the <a href="https://plugins.gradle.org">Gradle Plugin Portal</a> because of changes to artifacts hosted on JCenter by JFrog. JCenter stopped serving files directly and redirected all requests to Maven Central. This was an unannounced change.</p> <p>We contacted JFrog, and they replied it was a test and they would revert back to having JCenter serve artifacts.</p> <p>Around 18:30 UTC, JCenter returned to normal behavior.</p> <p>This post describes the effect this outage had on builds, ways to recover from similar outages,... <p><a href="https://blog.gradle.org/plugin-portal-outage-followup">❯ Read more</a></p> </article> <article class="post"> <h1 class="post-title"> <a href="https://blog.gradle.org/kotlin-dsl-is-now-the-default-for-new-gradle-builds">Kotlin DSL is Now the Default for New Gradle Builds</a> </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="2023-04-13T00:00:00-04:00">April 13, 2023</time> </div> <div class="post-author"> <img class="post-meta-icon" src="https://avatars.githubusercontent.com/u/132773?v=3&s=36" width="18" height="18"> <a href="https://github.com/eskatos">Paul Merlin</a> </div> <div class="post-category"> <svg width="16px" height="16px" viewBox="0 0 16 12" class="category-general-icon" 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" stroke-linecap="round" stroke-linejoin="round"> <g stroke="#02303A"> <polygon id="Stroke-3370" points="5 2.5 0.5 2.5 0.5 13.5 15.5 13.5 15.5 4.5 7 4.5"></polygon> </g> </g> </svg> <a style="margin-left: 4px;" href="https://blog.gradle.org/category/general">General</a> </div> </div> <p>Kotlin DSL for Gradle was introduced in version 3.0 of the Gradle Build Tool in <a href="https://blog.gradle.org/kotlin-meets-gradle">August 2016</a> and <a href="https://blog.gradle.org/kotlin-dsl-1.0">released as 1.0 in Gradle 5.0</a>. Since then, it’s been growing in popularity and has greatly improved the authoring experience of many Gradle builds.</p> <p>Kotlin DSL is now the default choice for new Gradle builds. This means that when creating a new project with Gradle, including in IntelliJ IDEA (starting with 2023.1) and Android Studio (starting with Giraffe), Kotlin DSL is the default option. Support for Groovy DSL will continue for existing projects or those who prefer to use it.</p> <p>In this post, we will explore the benefits of Kotlin DSL and why it is becoming the recommended option for new Gradle... <p><a href="https://blog.gradle.org/kotlin-dsl-is-now-the-default-for-new-gradle-builds">❯ Read more</a></p> </article> <article class="post"> <h1 class="post-title"> <a href="https://blog.gradle.org/how-gradle-works-3">How Gradle Works Part 3 - Build Script</a> </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="2023-03-09T21:00:00-05:00">March 9, 2023</time> </div> <div class="post-author"> <img class="post-meta-icon" src="https://avatars.githubusercontent.com/u/12689835?v=3&s=36" width="18" height="18"> <a href="https://github.com/blindpirate">Bo Zhang</a> </div> <div class="post-category"> <svg width="16px" height="16px" viewBox="0 0 16 12" class="category-general-icon" 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" stroke-linecap="round" stroke-linejoin="round"> <g stroke="#02303A"> <polygon id="Stroke-3370" points="5 2.5 0.5 2.5 0.5 13.5 15.5 13.5 15.5 4.5 7 4.5"></polygon> </g> </g> </svg> <a style="margin-left: 4px;" href="https://blog.gradle.org/category/general">General</a> </div> </div> <p>Previously on <em>How Gradle Works</em>:</p> <ol> <li><a href="./how-gradle-works-1">How Gradle Part 1 - Startup</a></li> <li><a href="./how-gradle-works-2">How Gradle Part 2 - Inside The Daemon</a></li> </ol> <p>This is the third blog of the series <em>How Gradle Works</em>. In this blog we’ll explain what happens during build script execution.</p> <h2 id="kotlin--groovy-dsl">Kotlin & Groovy DSL</h2> <p>If you are a Java developer, when you open any Gradle build script (for example <code class="language-plaintext highlighter-rouge">build.gradle.kts</code> or <code class="language-plaintext highlighter-rouge">build.gradle</code>), the first thing that might confuse you is the special syntax of curly braces:</p> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>// Kotlin DSL: plugins { id("some.plugin") version "0.0.1" } // or Groovy DSL: plugins { id "some.plugin" version "0.0.1" } </code></pre></div></div> <p>What’s this? What happens when Gradle executes these kinds of scripts?</p>... <p><a href="https://blog.gradle.org/how-gradle-works-3">❯ Read more</a></p> </article> <article class="post"> <h1 class="post-title"> <a href="https://blog.gradle.org/how-gradle-works-2">How Gradle Works Part 2 - Inside The Daemon</a> </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="2023-01-21T02:00:00-05:00">January 21, 2023</time> </div> <div class="post-author"> <img class="post-meta-icon" src="https://avatars.githubusercontent.com/u/12689835?v=3&s=36" width="18" height="18"> <a href="https://github.com/blindpirate">Bo Zhang</a> </div> <div class="post-category"> <svg width="16px" height="16px" viewBox="0 0 16 12" class="category-general-icon" 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" stroke-linecap="round" stroke-linejoin="round"> <g stroke="#02303A"> <polygon id="Stroke-3370" points="5 2.5 0.5 2.5 0.5 13.5 15.5 13.5 15.5 4.5 7 4.5"></polygon> </g> </g> </svg> <a style="margin-left: 4px;" href="https://blog.gradle.org/category/general">General</a> </div> </div> <p>Previously on <em>How Gradle Works</em>:</p> <ol> <li><a href="./how-gradle-works-1">How Gradle Part 1 - Startup</a></li> </ol> <p>This is the second blog of the series <em>How Gradle Works</em>. In this blog we’ll explain what happens inside the <code class="language-plaintext highlighter-rouge">Gradle Daemon JVM</code>.</p> <h2 id="why-we-need-gradle-daemon">Why We Need Gradle Daemon?</h2> <p>In <a href="https://blog.gradle.org/how-gradle-works-1">the last blog</a>, we mentioned that Gradle starts a <code class="language-plaintext highlighter-rouge">Gradle Daemon JVM</code> (“the daemon”) to run the build. <a href="https://docs.gradle.org/current/userguide/gradle_daemon.html">The userguide</a> explains why we need the daemon.</p> <blockquote> <p>The Daemon is a long-lived background process that reduces the time it takes to run a build. The Daemon reduces build times by:</p> <ul> <li> <p>caching project information across builds</p> </li> <li> <p>running in the background so every Gradle build doesn’t have to wait for... <p><a href="https://blog.gradle.org/how-gradle-works-2">❯ Read more</a></p> </article> <article class="post"> <h1 class="post-title"> <a href="https://blog.gradle.org/how-gradle-works-1">How Gradle Works Part 1 - Startup</a> </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="2023-01-10T21:00:00-05:00">January 10, 2023</time> </div> <div class="post-author"> <img class="post-meta-icon" src="https://avatars.githubusercontent.com/u/12689835?v=3&s=36" width="18" height="18"> <a href="https://github.com/blindpirate">Bo Zhang</a> </div> <div class="post-category"> <svg width="16px" height="16px" viewBox="0 0 16 12" class="category-general-icon" 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" stroke-linecap="round" stroke-linejoin="round"> <g stroke="#02303A"> <polygon id="Stroke-3370" points="5 2.5 0.5 2.5 0.5 13.5 15.5 13.5 15.5 4.5 7 4.5"></polygon> </g> </g> </svg> <a style="margin-left: 4px;" href="https://blog.gradle.org/category/general">General</a> </div> </div> <p>This is the first blog of a series <em>How Gradle Works</em>, which includes the following topics:</p> <ul> <li>How Gradle starts up</li> <li>How many JVMs are involved in a Gradle build</li> <li>What happens in each JVM during the build</li> </ul> <p>We’ll explain the first topic <em>How Gradle Starts Up</em> in this blog. Before reading on, we assume you are familiar with basic JVM/Gradle concepts (jar, classpath, wrapper, daemon, project, task, etc.).</p> <h2 id="how-gradle-starts-up">How Gradle Starts Up</h2> <p>There are many ways to start a Gradle build:</p> <ul> <li>Local Gradle Distribution in CLI: <code class="language-plaintext highlighter-rouge">/path/to/local/distribution/bin/gradle <SomeTask></code></li> <li>Gradle Wrapper in CLI: <code class="language-plaintext highlighter-rouge">./gradlew <SomeTask></code></li> <li>Click a button in your IDE to import a Gradle project or run some tests/tasks</li> </ul> <p>What’s the difference? What... <p><a href="https://blog.gradle.org/how-gradle-works-1">❯ Read more</a></p> </article> <article class="post"> <h1 class="post-title"> <a href="https://blog.gradle.org/design-spec-annoucement">Introducing Public Design Specs</a> </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="2022-12-07T00:00:00-05:00">December 7, 2022</time> </div> <div class="post-author"> <img class="post-meta-icon" src="https://avatars.githubusercontent.com/u/5387972?v=3&s=36" width="18" height="18"> <a href="https://github.com/big-guy">Sterling Greene</a> </div> <div class="post-category"> <svg width="16px" height="16px" viewBox="0 0 16 12" class="category-general-icon" 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" stroke-linecap="round" stroke-linejoin="round"> <g stroke="#02303A"> <polygon id="Stroke-3370" points="5 2.5 0.5 2.5 0.5 13.5 15.5 13.5 15.5 4.5 7 4.5"></polygon> </g> </g> </svg> <a style="margin-left: 4px;" href="https://blog.gradle.org/category/general">General</a> </div> </div> <p>Gradle Build Tool is an open source project, but a lot of the design work has not been as visible as it could be. Internally, we use design specifications to collaborate on new Gradle features. To make our development process more open and transparent, our design specifications are publicly available via a <a href="https://drive.google.com/drive/folders/1JM7OQwdHGOuoptVtfrwRpzEuzRnCbWXZ?usp=drive_link">Google Drive folder</a>.</p> <p>This is still a work-in-progress and new documents will be added over time. We welcome community members to take a look. You can comment and provide feedback on all documents still In-Progress. We plan to use these documents to help guide new community contributions. Feel free to link to these documents in GitHub or share them with others.</p> <p>Along with the <a href="https://github.com/orgs/gradle/projects/31/views/1">public roadmap</a>, we hope... <p><a href="https://blog.gradle.org/design-spec-annoucement">❯ Read more</a></p> </article> <article class="post"> <h1 class="post-title"> <a href="https://blog.gradle.org/compilation-avoidance">Compilation Avoidance</a> </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="2022-11-28T00:00:00-05:00">November 28, 2022</time> </div> <div class="post-author"> <img class="post-meta-icon" src="https://avatars.githubusercontent.com/u/51727488?v=3&s=36" width="18" height="18"> <a href="https://github.com/hythloda">Amanda Martin</a> </div> <div class="post-category"> <svg width="16px" height="16px" viewBox="0 0 16 12" class="category-general-icon" 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" stroke-linecap="round" stroke-linejoin="round"> <g stroke="#02303A"> <polygon id="Stroke-3370" points="5 2.5 0.5 2.5 0.5 13.5 15.5 13.5 15.5 4.5 7 4.5"></polygon> </g> </g> </svg> <a style="margin-left: 4px;" href="https://blog.gradle.org/category/general">General</a> </div> </div> <p>We’ve recently noticed some community chatter about speeding up Gradle compilation on the JVM by ignoring changes not affecting the ABIs of dependencies. What a great idea! In fact, Gradle has used ABIs for Java out of the box for this without any extra configuration <a href="https://blog.gradle.org/incremental-compiler-avoidance">since version 3.4</a>. We refer to this feature as <strong><a href="https://docs.gradle.org/current/userguide/java_plugin.html#sec:java_compile_avoidance">compilation avoidance</a></strong>. This post explains what ABI-based compilation means for the average workflow. Spoiler: utilizing compilation avoidance is one of the best performance enhancements for any build.</p> <h4 id="what-is-an-application-binary-interface">What is an application binary interface?</h4> <p>An application binary interface (ABI) is the interface generated from compiling software that defines internal and external interaction. The ABI represents what is visible to consumers at compile time. When compiling a... <p><a href="https://blog.gradle.org/compilation-avoidance">❯ Read more</a></p> </article> <article class="post"> <h1 class="post-title"> <a href="https://blog.gradle.org/how-we-handle-flaky-tests-in-gradle">How We Handle Flaky Tests in Gradle</a> </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="2022-11-02T22:00:00-04:00">November 2, 2022</time> </div> <div class="post-author"> <img class="post-meta-icon" src="https://avatars.githubusercontent.com/u/12689835?v=3&s=36" width="18" height="18"> <a href="https://github.com/blindpirate">Bo Zhang</a> </div> <div class="post-category"> <svg width="16px" height="16px" viewBox="0 0 16 12" class="category-general-icon" 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" stroke-linecap="round" stroke-linejoin="round"> <g stroke="#02303A"> <polygon id="Stroke-3370" points="5 2.5 0.5 2.5 0.5 13.5 15.5 13.5 15.5 4.5 7 4.5"></polygon> </g> </g> </svg> <a style="margin-left: 4px;" href="https://blog.gradle.org/category/general">General</a> </div> </div> <p>Test flakiness is one of the main challenges of automated testing. Even though Gradle’s focus is increasing developer productivity, the development of Gradle itself suffers from flaky automated tests. This blog explains some best practices when developing Gradle, which have proved effective over the years we fight with flaky tests.</p> <h2 id="the-story">The Story</h2> <p>Like in many other projects, every commit of Gradle must pass tens of thousands of automated tests. Any tiny flakiness may cause developer productivity loss. When I joined Gradle 5 years ago, the CI was full of flaky test failures - people would rerun a build, again and again, hoping to be lucky enough to get a green build.</p> <p>Later, we started a dedicated developer productivity team to deal... <p><a href="https://blog.gradle.org/how-we-handle-flaky-tests-in-gradle">❯ Read more</a></p> </article> <article class="post"> <h1 class="post-title"> <a href="https://blog.gradle.org/gh-actions">A Better Way to Use Gradle With Github Actions</a> </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="2022-09-14T02:00:00-04:00">September 14, 2022</time> </div> <div class="post-author"> <img class="post-meta-icon" src="https://avatars.githubusercontent.com/u/179734?v=3&s=36" width="18" height="18"> <a href="https://github.com/bigdaz">Daz DeBoer</a> </div> <div class="post-category"> <svg width="16px" height="16px" viewBox="0 0 16 12" class="category-general-icon" 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" stroke-linecap="round" stroke-linejoin="round"> <g stroke="#02303A"> <polygon id="Stroke-3370" points="5 2.5 0.5 2.5 0.5 13.5 15.5 13.5 15.5 4.5 7 4.5"></polygon> </g> </g> </svg> <a style="margin-left: 4px;" href="https://blog.gradle.org/category/general">General</a> </div> </div> <h2 id="running-gradle-builds-on-github-actions">Running Gradle builds on GitHub Actions</h2> <p>GitHub Actions provides a convenient and powerful CI platform for projects hosted on GitHub. To enhance the experience of building Gradle projects on GitHub Actions, the Gradle team has developed the <code class="language-plaintext highlighter-rouge">gradle-build-action</code>. Together with Gradle Build Scans™, the <code class="language-plaintext highlighter-rouge">gradle-build-action</code> provides deep integration between Gradle and GitHub Actions, providing easier setup and a better experience when building and testing your Gradle project with GitHub Actions.</p> <p>The <code class="language-plaintext highlighter-rouge">gradle-build-action</code> is the <a href="https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-java-with-gradle">officially supported</a> way to run your Gradle build in GitHub Actions, taking care of preparing and optimizing Gradle for your GitHub Actions workflow. When applied to a workflow, all subsequent Gradle invocations will be optimized, allowing you to simply run... <p><a href="https://blog.gradle.org/gh-actions">❯ Read more</a></p> </article> <article class="post"> <h1 class="post-title"> <a href="https://blog.gradle.org/simplifying-the-plugin-publish-plugin">Simplifying the Plugin-Publish Plugin</a> </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="2022-07-18T00:00:00-04:00">July 18, 2022</time> </div> <div class="post-author"> <img class="post-meta-icon" src="https://avatars.githubusercontent.com/u/6204813?v=3&s=36" width="18" height="18"> <a href="https://github.com/jbartok">Jozsef Bartok</a> </div> <div class="post-category"> <svg width="16px" height="16px" viewBox="0 0 16 12" class="category-general-icon" 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" stroke-linecap="round" stroke-linejoin="round"> <g stroke="#02303A"> <polygon id="Stroke-3370" points="5 2.5 0.5 2.5 0.5 13.5 15.5 13.5 15.5 4.5 7 4.5"></polygon> </g> </g> </svg> <a style="margin-left: 4px;" href="https://blog.gradle.org/category/general">General</a> </div> </div> <p>Configuring the publication of Gradle plugins to the <a href="https://plugins.gradle.org/">Portal</a> happens with the help of the <a href="https://plugins.gradle.org/plugin/com.gradle.plugin-publish">Plugin-Publish plugin</a>. The recently released <a href="https://plugins.gradle.org/plugin/com.gradle.plugin-publish/1.0.0">version 1.0.0</a> of the plugin significantly improves the process by having stronger opinions and a more straightforward configuration.</p> <h1 id="stronger-conventions">Stronger Conventions</h1> <p>Gradle plugin development has a long history and has gradually evolved to use helper plugins to aid you with setting up your plugin project. The most important ones:</p> <ul> <li><a href="https://docs.gradle.org/current/userguide/java_gradle_plugin.html">Gradle Plugin Development plugin</a> (<code class="language-plaintext highlighter-rouge">java-gradle-plugin</code>)</li> <li><a href="https://docs.gradle.org/current/userguide/publishing_maven.html">Maven Publish plugin</a> (<code class="language-plaintext highlighter-rouge">maven-publish</code>)</li> </ul> <p>The Plugin-Publish plugin shares this long history, and it ended up supporting all the various combinations of helper plugins. This results in too many ways of publishing plugins, and too many configuration options,... <p><a href="https://blog.gradle.org/simplifying-the-plugin-publish-plugin">❯ Read more</a></p> </article> <article class="post"> <h1 class="post-title"> <a href="https://blog.gradle.org/general-build-distribution">General Build Distribution: A Game-Changer or a Gimmick?</a> </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="2022-07-12T02:00:01-04:00">July 12, 2022</time> </div> <div class="post-author"> <img class="post-meta-icon" src="https://avatars.githubusercontent.com/u/2841209?v=3&s=36" width="18" height="18"> <a href="https://github.com/DPUkyle">Kyle Moore</a> </div> <div class="post-category"> <svg width="16px" height="16px" viewBox="0 0 16 12" class="category-general-icon" 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" stroke-linecap="round" stroke-linejoin="round"> <g stroke="#02303A"> <polygon id="Stroke-3370" points="5 2.5 0.5 2.5 0.5 13.5 15.5 13.5 15.5 4.5 7 4.5"></polygon> </g> </g> </svg> <a style="margin-left: 4px;" href="https://blog.gradle.org/category/general">General</a> </div> </div> <p>The <a href="/remote-and-distributed-build-patterns">Remote and Distributed Build Patterns</a> article explains the differences between remote and distributed builds and variations on each. Specifically, we distinguished between “test distribution” and “general build distribution”.</p> <p>This article discusses distributed builds in a broader perspective of improving build feedback times. We’ll start by explaining the types of changes engineers tend to make, identify the typical bottlenecks and share how these relate to distributed builds. We will also study the performance potential of general build distribution. Finally, we will explore a holistic approach to improving build feedback times.</p> <p>In greater detail below, we will elaborate on these three findings:</p> <ul> <li>Building in a distributed fashion is not a substitute for a well-tuned build process.</li> <li>Improving incremental build performance, not... <p><a href="https://blog.gradle.org/general-build-distribution">❯ Read more</a></p> </article> <article class="post"> <h1 class="post-title"> <a href="https://blog.gradle.org/remote-and-distributed-build-patterns">Remote and Distributed Build Patterns</a> </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="2022-07-12T02:00:00-04:00">July 12, 2022</time> </div> <div class="post-author"> <img class="post-meta-icon" src="https://avatars.githubusercontent.com/u/2841209?v=3&s=36" width="18" height="18"> <a href="https://github.com/DPUkyle">Kyle Moore</a> </div> <div class="post-category"> <svg width="16px" height="16px" viewBox="0 0 16 12" class="category-general-icon" 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" stroke-linecap="round" stroke-linejoin="round"> <g stroke="#02303A"> <polygon id="Stroke-3370" points="5 2.5 0.5 2.5 0.5 13.5 15.5 13.5 15.5 4.5 7 4.5"></polygon> </g> </g> </svg> <a style="margin-left: 4px;" href="https://blog.gradle.org/category/general">General</a> </div> </div> <p>A frequently-requested feature for the Gradle Build Tool is the ability to perform remote or distributed builds. But what exactly does this mean? And what are the motivations behind the requests? This post will explore the difference between remote vs. distributed builds and their variations. As there is no industry-wide agreement on consistent terminology for these concepts, the goal of this post is to give an overview of these patterns and how they relate to each other.</p> <p>Except for two JVM-specific references, these observations are generally applicable to software projects using any language or ecosystem.</p> <h2 id="but-why">But Why?</h2> <p>These features are typically discussed in the context of shortening build times on local developer machines. Extended build turnaround times hinder productivity in both... <p><a href="https://blog.gradle.org/remote-and-distributed-build-patterns">❯ Read more</a></p> </article> <article class="post"> <h1 class="post-title"> <a href="https://blog.gradle.org/mentoring-program-annoucement">Mentoring Program Announcement</a> </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="2022-06-23T00:00:00-04:00">June 23, 2022</time> </div> <div class="post-author"> <img class="post-meta-icon" src="https://avatars.githubusercontent.com/u/51727488?v=3&s=36" width="18" height="18"> <a href="https://github.com/hythloda">Amanda Martin</a> </div> <div class="post-category"> <svg width="16px" height="16px" viewBox="0 0 16 12" class="category-general-icon" 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" stroke-linecap="round" stroke-linejoin="round"> <g stroke="#02303A"> <polygon id="Stroke-3370" points="5 2.5 0.5 2.5 0.5 13.5 15.5 13.5 15.5 4.5 7 4.5"></polygon> </g> </g> </svg> <a style="margin-left: 4px;" href="https://blog.gradle.org/category/general">General</a> </div> </div> <p>The lack of diversity in the technical world is a chronic, pervasive issue. For example, a <a href="https://www.statista.com/statistics/1126823/worldwide-developer-gender/#:~:text=According%20to%20a%20global%20software,of%20the%20software%20development%20job.">2021 global software developer survey</a> showed that female software developers are only 5 percent of the population. This is something we need to change.</p> <p>To help promote diversity in our industry, Gradle is excited to announce a new mentorship program. The program is open to everyone, but we’ll be prioritizing mentees from <a href="https://services.google.com/fh/files/misc/diversity-gaps-in-computer-science-report.pdf">underrepresented segments of the developer community, including women, and Black and Hispanic</a> individuals, who want support and enhanced professional development from members of the Gradle Build Tool community. Mentees in the program will have access to personalized discussions on using Gradle Build Tool, build automation, developer productivity and more.</p> <p>Members of our... <p><a href="https://blog.gradle.org/mentoring-program-annoucement">❯ Read more</a></p> </article> <article class="post"> <h1 class="post-title"> <a href="https://blog.gradle.org/roadmap-announcement">Gradle Public Roadmap</a> </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="2022-06-17T00:00:00-04:00">June 17, 2022</time> </div> <div class="post-author"> <img class="post-meta-icon" src="https://avatars.githubusercontent.com/u/1292566?v=3&s=36" width="18" height="18"> <a href="https://github.com/pioterj">Piotr Jagielski</a> </div> <div class="post-category"> <svg width="16px" height="16px" viewBox="0 0 16 12" class="category-general-icon" 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" stroke-linecap="round" stroke-linejoin="round"> <g stroke="#02303A"> <polygon id="Stroke-3370" points="5 2.5 0.5 2.5 0.5 13.5 15.5 13.5 15.5 4.5 7 4.5"></polygon> </g> </g> </svg> <a style="margin-left: 4px;" href="https://blog.gradle.org/category/general">General</a> </div> </div> <p>We are excited to announce that the Gradle Build Tool roadmap is now public. See the <a href="https://github.com/orgs/gradle/projects/31/views/1">roadmap board</a> and the associated <a href="https://github.com/gradle/build-tool-roadmap">readme</a>.</p> <h2 id="motivation">Motivation</h2> <p>The Gradle Build Tool project regularly ships new releases full of new features and bug fixes. So far our main channels of communication with the user community to share plans and get feedback were <a href="https://gradle.org/releases/">release notes</a>, <a href="https://blog.gradle.org/">blog</a>, <a href="https://github.com/gradle/gradle/issues">issue tracker</a>, <a href="https://discuss.gradle.org/">forums</a>, and <a href="https://gradle-community.slack.com">community Slack</a>. However, we lacked a high-level overview of what’s planned in the upcoming releases.</p> <h2 id="about-the-roadmap">About the roadmap</h2> <p>Today, we are announcing our new <a href="https://github.com/orgs/gradle/projects/31/views/1">roadmap board</a> hosted on GitHub. It lists major projects and user-facing features, organized by quarter and target release.</p> <p>The board also shows the past... <p><a href="https://blog.gradle.org/roadmap-announcement">❯ Read more</a></p> </article> <article class="post"> <h1 class="post-title"> <a href="https://blog.gradle.org/plugins-jcenter">Gradle Plugin Resolution Outage Postmortem</a> </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="2022-01-20T00:00:00-05:00">January 20, 2022</time> </div> <div class="post-author"> <img class="post-meta-icon" src="https://avatars.githubusercontent.com/u/135308?v=3&s=36" width="18" height="18"> <a href="https://github.com/ljacomet">Louis Jacomet</a> </div> <div class="post-category"> <svg width="16px" height="16px" viewBox="0 0 16 12" class="category-general-icon" 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" stroke-linecap="round" stroke-linejoin="round"> <g stroke="#02303A"> <polygon id="Stroke-3370" points="5 2.5 0.5 2.5 0.5 13.5 15.5 13.5 15.5 4.5 7 4.5"></polygon> </g> </g> </svg> <a style="margin-left: 4px;" href="https://blog.gradle.org/category/general">General</a> </div> </div> <p>On January 12th 2022, Gradle users were experiencing issues resolving plugins from the <a href="https://plugins.gradle.org">Gradle Plugin Portal</a> because of the outage of JCenter that the Plugin Portal depends on for some of the functionality.</p> <p>This postmortem gives a timeline of the outage, describes the effect on Gradle users, and what actions were taken to further reduce the Gradle Plugin Portal’s reliance on JCenter.</p> <p>Finally, we will also discuss how <em>you</em> can protect <em>your build</em> against such outages.</p> <p>Users affected by JCenter outages for project dependencies should also refer to <a href="/jcenter-shutdown">our original blog post</a> about the shutdown of JCenter.</p> <h2 id="outage-timeline">Outage timeline</h2> <dl> <dt>4.30pm UTC, January 12th <em>Outage begins</em></dt> <dd>Gradle users start noticing that plugin resolution is failing in builds.</dd> <dt>4.56pm UTC,... <p><a href="https://blog.gradle.org/plugins-jcenter">❯ Read more</a></p> </article> <article class="post"> <h1 class="post-title"> <a href="https://blog.gradle.org/plugin-portal-validations">Automatic Feedback on Plugin Publication</a> </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="2021-11-04T00:00:00-04:00">November 4, 2021</time> </div> <div class="post-author"> <img class="post-meta-icon" src="https://avatars.githubusercontent.com/u/6204813?v=3&s=36" width="18" height="18"> <a href="https://github.com/jbartok">Jozsef Bartok</a> </div> <div class="post-category"> <svg width="16px" height="16px" viewBox="0 0 16 12" class="category-general-icon" 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" stroke-linecap="round" stroke-linejoin="round"> <g stroke="#02303A"> <polygon id="Stroke-3370" points="5 2.5 0.5 2.5 0.5 13.5 15.5 13.5 15.5 4.5 7 4.5"></polygon> </g> </g> </svg> <a style="margin-left: 4px;" href="https://blog.gradle.org/category/general">General</a> </div> </div> <p>New Gradle plugins undergo a manual inspection before they get approved to be published in the <a href="https://plugins.gradle.org/">Plugin Portal</a>. Most of the performed checks are now fully automated in order to reduce wait time for plugin authors and reduce the risk of human errors. This blog post describes the new automation affecting community plugin authors and explains that it is important for the security of the ecosystem.</p> <h1 id="plugin-publishing-security">Plugin Publishing Security</h1> <p>One of our priorities at Gradle is reducing the risk of supply chain attacks. Such insidious attacks can have a very large scale and impact. For example, a malicious community plugin may potentially infect a large number of software systems built with Gradle. You can read more about such attacks and... <p><a href="https://blog.gradle.org/plugin-portal-validations">❯ Read more</a></p> </article> <article class="post"> <h1 class="post-title"> <a href="https://blog.gradle.org/jcenter-shutdown">JCenter Shutdown Impact on Gradle Builds</a> </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="2021-02-22T00:00:00-05:00">February 22, 2021</time> </div> <div class="post-author"> <img class="post-meta-icon" src="https://avatars.githubusercontent.com/u/5387972?v=3&s=36" width="18" height="18"> <a href="https://github.com/big-guy">Sterling Greene</a> </div> <div class="post-category"> <svg width="16px" height="16px" viewBox="0 0 16 12" class="category-general-icon" 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" stroke-linecap="round" stroke-linejoin="round"> <g stroke="#02303A"> <polygon id="Stroke-3370" points="5 2.5 0.5 2.5 0.5 13.5 15.5 13.5 15.5 4.5 7 4.5"></polygon> </g> </g> </svg> <a style="margin-left: 4px;" href="https://blog.gradle.org/category/general">General</a> </div> </div> <table> <thead> <tr> <th>ℹ️ Update on July 15, 2024</th> </tr> </thead> <tbody> <tr> <td>See <a href="/portal-jcenter-impact">our recent blog post</a> for up-to-date information about the Plugin Portal and JCenter.</td> </tr> </tbody> </table> <p>On February 3 2021, JFrog <a href="https://jfrog.com/blog/into-the-sunset-bintray-jcenter-gocenter-and-chartcenter/">announced that they will be shutting down Bintray and JCenter</a>. This post tells you what you need to know and do to avoid disruptions to your build pipelines.</p> <p>Your build may be affected by this shutdown in several ways:</p> <ul> <li><a href="#impact-builds">Gradle may not be able to download the dependencies used to compile, test or run your code.</a></li> <li><a href="#impact-plugins">Gradle may not be able to download the dependencies used by plugins to configure your build.</a></li> <li><a href="#impact-publishing">Gradle may no longer be able to publish your... <p><a href="https://blog.gradle.org/jcenter-shutdown">❯ Read more</a></p> </article> <article class="post"> <h1 class="post-title"> <a href="https://blog.gradle.org/gradle-fellowship">Introducing the Gradle Fellowship Program</a> </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="2021-02-10T00:00:00-05:00">February 10, 2021</time> </div> <div class="post-author"> <img class="post-meta-icon" src="https://avatars.githubusercontent.com/u/1292566?v=3&s=36" width="18" height="18"> <a href="https://github.com/pioterj">Piotr Jagielski</a> </div> <div class="post-category"> <svg width="16px" height="16px" viewBox="0 0 16 12" class="category-general-icon" 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" stroke-linecap="round" stroke-linejoin="round"> <g stroke="#02303A"> <polygon id="Stroke-3370" points="5 2.5 0.5 2.5 0.5 13.5 15.5 13.5 15.5 4.5 7 4.5"></polygon> </g> </g> </svg> <a style="margin-left: 4px;" href="https://blog.gradle.org/category/general">General</a> </div> </div> <p>Community is instrumental to the success of every open-source project. At Gradle, we are very fortunate to serve and collaborate with an amazing community of users, champions, and plugin authors.</p> <p>Some of the community members go above and beyond to help other users succeed. We are extremely grateful for their dedication. Their valuable contributions to the community include helping others on the <a href="https://discuss.gradle.org/">Gradle Forums</a> and <a href="https://gradle.com/slack-invite">Community Slack</a>, publishing blog posts and presenting at conferences and user groups.</p> <p>We are excited to introduce the Gradle Fellowship program to recognize and connect those individuals and grow this global community of Gradle experts to help the broader Gradle community be more productive.</p> <p>We’ll support the Gradle Fellows in their efforts by offering additional... <p><a href="https://blog.gradle.org/gradle-fellowship">❯ Read more</a></p> </article> <article class="post"> <h1 class="post-title"> <a href="https://blog.gradle.org/gradle-vs-bazel-jvm">Gradle vs Bazel for JVM Projects</a> </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="2020-06-30T00:00:00-04:00">June 30, 2020</time> </div> <div class="post-author"> <img class="post-meta-icon" src="https://avatars.githubusercontent.com/u/1292566?v=3&s=36" width="18" height="18"> <a href="https://github.com/pioterj">Piotr Jagielski</a> </div> <div class="post-category"> <svg width="16px" height="16px" viewBox="0 0 16 12" class="category-general-icon" 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" stroke-linecap="round" stroke-linejoin="round"> <g stroke="#02303A"> <polygon id="Stroke-3370" points="5 2.5 0.5 2.5 0.5 13.5 15.5 13.5 15.5 4.5 7 4.5"></polygon> </g> </g> </svg> <a style="margin-left: 4px;" href="https://blog.gradle.org/category/general">General</a> </div> </div> <link href="https://cdnjs.cloudflare.com/ajax/libs/c3/0.7.15/c3.min.css" rel="stylesheet" type="text/css" /> <script src="https://cdnjs.cloudflare.com/ajax/libs/d3/5.16.0/d3.min.js" charset="utf-8"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/c3/0.7.15/c3.min.js"></script> <script type="text/javascript"> // Usage: chartPerformance('#commons-lang', 'Title', [['Scenario', 'Gradle 5.4', 'Maven 3.6'], ['My Scenario', 21.5, 38.3]]]) function chartPerformance(elementSelector, title, data) { c3.generate({ bindto: elementSelector, data: { rows: data, type: 'bar', x: 'Scenario', labels: true }, axis: { x: { type: 'category' }, y: { label: 'duration (s)' } }, legend: { position: 'bottom' }, title: { text: title }, color: { pattern: ['#1BA8CB', '#00CB9C', '#898989', '#02303A'] }, tooltip: { format: { value: function (value, ratio, id, index) { return value + 's'; } } } }); } </script> <h2 id="introduction">Introduction</h2> <p>Gradle has emerged as the build tool of choice for projects within the JVM ecosystem, including Kotlin. It is the most popular build... <p><a href="https://blog.gradle.org/gradle-vs-bazel-jvm">❯ Read more</a></p> </article> <article class="post"> <h1 class="post-title"> <a href="https://blog.gradle.org/stale-issue-backlog">Refining the Gradle issue backlog</a> </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="2020-06-09T00:00:00-04:00">June 9, 2020</time> </div> <div class="post-author"> <img class="post-meta-icon" src="https://avatars.githubusercontent.com/u/316929?v=3&s=36" width="18" height="18"> <a href="https://github.com/bmuskalla">Benjamin Muskalla</a> </div> <div class="post-category"> <svg width="16px" height="16px" viewBox="0 0 16 12" class="category-general-icon" 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" stroke-linecap="round" stroke-linejoin="round"> <g stroke="#02303A"> <polygon id="Stroke-3370" points="5 2.5 0.5 2.5 0.5 13.5 15.5 13.5 15.5 4.5 7 4.5"></polygon> </g> </g> </svg> <a style="margin-left: 4px;" href="https://blog.gradle.org/category/general">General</a> </div> </div> <p>One of the biggest success factors of Gradle is its community. There is no day that goes by without users suggesting new features, finding and reproducing defects or opening a pull request with a contribution. We appreciate every single issue that users create. Thank you!</p> <p>Working on a successful project like Gradle comes with challenges, be it the number of questions and contributions or deciding which aspect has the highest priority for the team. Even though we don’t like to accept it, we don’t have infinite capacity. We want our teams to be able to focus on producing the most value for our users. That means fixing the right bugs and implementing the best features. Given the diversity of our community, this... <p><a href="https://blog.gradle.org/stale-issue-backlog">❯ Read more</a></p> </article> <article class="post"> <h1 class="post-title"> <a href="https://blog.gradle.org/what-is-new-in-gradle-6">What’s new in Gradle 6.0</a> </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="2019-11-26T00:00:00-05:00">November 26, 2019</time> </div> <div class="post-author"> <img class="post-meta-icon" src="https://avatars.githubusercontent.com/u/51534?v=3&s=36" width="18" height="18"> <a href="https://github.com/eriwen">Eric Wendelin</a> </div> <div class="post-category"> <svg width="16px" height="16px" viewBox="0 0 16 12" class="category-general-icon" 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" stroke-linecap="round" stroke-linejoin="round"> <g stroke="#02303A"> <polygon id="Stroke-3370" points="5 2.5 0.5 2.5 0.5 13.5 15.5 13.5 15.5 4.5 7 4.5"></polygon> </g> </g> </svg> <a style="margin-left: 4px;" href="https://blog.gradle.org/category/general">General</a> </div> </div> <p>Gradle 6.0 is the culmination of several years of innovative improvements in Dependency Management. Embracing the idea that there is more to software composition and reuse than just putting a set of jar files on the classpath, Gradle now offers a new metadata format to richly define software components that are often made up of multiple files, different variants and specific constraints on their dependencies.</p> <p>In particular, in this webcast Developer Advocate Jenn Strater and Gradle Engineer Jendrik Johannes discuss:</p> <ol> <li>What’s New in Dependency Management</li> <li>Java, Groovy, and Scala toolchain improvements</li> <li>New features for plugin authors</li> </ol> <p style="text-align:center;"><iframe width="560" height="315" style="text-align:center;" src="https://www.youtube.com/embed/nHXy2due_fA" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen=""></iframe></p> <p>You can access the slides of the... <p><a href="https://blog.gradle.org/what-is-new-in-gradle-6">❯ Read more</a></p> </article> <article class="post"> <h1 class="post-title"> <a href="https://blog.gradle.org/build-scans-tag-root-cause">Using build scan tags for ad-hoc root cause analysis</a> </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="2019-01-15T00:00:00-05:00">January 15, 2019</time> </div> <div class="post-author"> <img class="post-meta-icon" src="https://avatars.githubusercontent.com/u/5402301?v=3&s=36" width="18" height="18"> <a href="https://github.com/autonomousapps">Tony Robalik</a> </div> <div class="post-category"> <svg width="16px" height="16px" viewBox="0 0 16 12" class="category-general-icon" 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" stroke-linecap="round" stroke-linejoin="round"> <g stroke="#02303A"> <polygon id="Stroke-3370" points="5 2.5 0.5 2.5 0.5 13.5 15.5 13.5 15.5 4.5 7 4.5"></polygon> </g> </g> </svg> <a style="margin-left: 4px;" href="https://blog.gradle.org/category/general">General</a> </div> </div> <p>Recently I was helping an Android team investigate a hard-to-reproduce issue that manifested as very-long-running compilation and annotation processing tasks. Most of their builds took only a few minutes to run, but sometimes they took up to 30 minutes! In these cases, invariably, a build scan showed that some combination of Java compilation, Kotlin compilation, or annotation processing with Kapt, was the culprit. The team had no real idea of how often this problem occurred for developers, and under what conditions.</p> <p>Gradle Enterprise does not, yet, provide a way to find builds based on how long a particular task took. However, custom <strong>tags</strong> make it easy to categorize and find builds for any condition that can be detected within a build. By... <p><a href="https://blog.gradle.org/build-scans-tag-root-cause">❯ Read more</a></p> </article> <article class="post"> <h1 class="post-title"> <a href="https://blog.gradle.org/what-is-new-in-gradle-5">What’s new in Gradle 5.0</a> </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="2018-12-04T00:00:00-05:00">December 4, 2018</time> </div> <div class="post-author"> <img class="post-meta-icon" src="https://avatars.githubusercontent.com/u/51534?v=3&s=36" width="18" height="18"> <a href="https://github.com/eriwen">Eric Wendelin</a> </div> <div class="post-category"> <svg width="16px" height="16px" viewBox="0 0 16 12" class="category-general-icon" 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" stroke-linecap="round" stroke-linejoin="round"> <g stroke="#02303A"> <polygon id="Stroke-3370" points="5 2.5 0.5 2.5 0.5 13.5 15.5 13.5 15.5 4.5 7 4.5"></polygon> </g> </g> </svg> <a style="margin-left: 4px;" href="https://blog.gradle.org/category/general">General</a> </div> </div> <p>A lot has changed for Gradle since version 4.0 was released in mid-2017.</p> <p>Gradle 5.0 is much faster and more memory efficient than previous versions of Gradle, has better tools to inspect and manage transitive dependencies, and can provide the IDE assistance you’d always hoped and expected through a new Kotlin DSL.</p> <p>This 1-hour webcast demonstrates 4 key themes of Gradle 5.0:</p> <p>What Gradle’s Kotlin DSL does and who should adopt it How to take full advantage of incremental compilation and annotation processing Why unexpected dependency version X was selected and how to fix it What new task APIs are available in Gradle 5.0 If you prefer just the info, check out this page on the <a href="https://gradle.org/whats-new/gradle-5/">highlights of Gradle 5.0</a> and... <p><a href="https://blog.gradle.org/what-is-new-in-gradle-5">❯ Read more</a></p> </article> <article class="post"> <h1 class="post-title"> <a href="https://blog.gradle.org/new-plugin-portal-acceptance-criteria">Gradle Plugin Portal Approval Policy Update</a> </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="2018-10-18T00:00:00-04:00">October 18, 2018</time> </div> <div class="post-author"> <img class="post-meta-icon" src="https://avatars.githubusercontent.com/u/51534?v=3&s=36" width="18" height="18"> <a href="https://github.com/eriwen">Eric Wendelin</a> </div> <div class="post-category"> <svg width="16px" height="16px" viewBox="0 0 16 12" class="category-general-icon" 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" stroke-linecap="round" stroke-linejoin="round"> <g stroke="#02303A"> <polygon id="Stroke-3370" points="5 2.5 0.5 2.5 0.5 13.5 15.5 13.5 15.5 4.5 7 4.5"></polygon> </g> </g> </svg> <a style="margin-left: 4px;" href="https://blog.gradle.org/category/general">General</a> </div> </div> <p>Gradle is updating the plugin approval policy for plugins submitted to the <a href="https://plugins.gradle.org">Gradle Plugin Portal</a>, effective today, to begin adding stronger security safeguards for plugin consumers.</p> <p>First off, this does not affect plugins already on the plugin portal, just new plugins. Gradle builds that use plugins will not be affected in any way.</p> <h2 id="portal-acceptance-criteria-in-a-nutshell">Portal acceptance criteria in a nutshell</h2> <p>Gradle will check the following for new plugins submitted to plugins.gradle.org:</p> <ul> <li>Description and project URL are valid and not misleading</li> <li>The group ID and artifact ID are valid and not misleading</li> </ul> <p>In addition to these changes, plugins with a valid open-source repo URL will be prioritized over other plugins for approval. Those that apply a SPDX-compatible license properly, even... <p><a href="https://blog.gradle.org/new-plugin-portal-acceptance-criteria">❯ Read more</a></p> </article> <article class="post"> <h1 class="post-title"> <a href="https://blog.gradle.org/groovy-kotlin-dsl-samples">How to show Groovy and Kotlin DSL samples side-by-side</a> </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="2018-10-11T00:00:00-04:00">October 11, 2018</time> </div> <div class="post-author"> <img class="post-meta-icon" src="https://avatars.githubusercontent.com/u/51534?v=3&s=36" width="18" height="18"> <a href="https://github.com/eriwen">Eric Wendelin</a> </div> <div class="post-category"> <svg width="16px" height="16px" viewBox="0 0 16 12" class="category-general-icon" 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" stroke-linecap="round" stroke-linejoin="round"> <g stroke="#02303A"> <polygon id="Stroke-3370" points="5 2.5 0.5 2.5 0.5 13.5 15.5 13.5 15.5 4.5 7 4.5"></polygon> </g> </g> </svg> <a style="margin-left: 4px;" href="https://blog.gradle.org/category/general">General</a> </div> </div> <p>Gradle build script samples now have Kotlin DSL snippets alongside the Groovy snippets in <a href="https://docs.gradle.org/5.0/">Gradle 5.0 docs</a> and many <a href="https://gradle.org/guides/">Gradle guides</a>.</p> <video controls="" autoplay="" muted="" preload="all" width="100%"> <source src="/images/groovy-kotlin-dsl-samples/multi-lang-sample-web.webm" type="video/webm" /> <source src="/images/groovy-kotlin-dsl-samples/multi-lang-sample-web.mp4" type="video/mp4" /> </video> <p>We want you to be able to show both DSLs in your READMEs and web-based documentation, so this post shows ways you can display examples in <a href="#groovy-and-kotlin-dsl-samples-on-github">multiple languages on GitHub</a> and <a href="#groovy-and-kotlin-dsl-samples-on-the-web">on your websites</a>.</p> <h2 id="groovy-and-kotlin-dsl-samples-on-github">Groovy and Kotlin DSL samples on GitHub</h2> <p>It’s hard to find OSS projects that don’t have a <code class="language-plaintext highlighter-rouge">README.md</code> or <code class="language-plaintext highlighter-rouge">README.adoc</code>. Though there aren’t many ways to make these README pages interactive, we can use the <code class="language-plaintext highlighter-rouge"><details></code> and <code class="language-plaintext highlighter-rouge"><summary></code> HTML... <p><a href="https://blog.gradle.org/groovy-kotlin-dsl-samples">❯ Read more</a></p> </article> <article class="post"> <h1 class="post-title"> <a href="https://blog.gradle.org/documentation-samples-testing-exemplar">Introducing Exemplar for Automated Samples Testing</a> </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="2018-10-09T00:00:00-04:00">October 9, 2018</time> </div> <div class="post-author"> <img class="post-meta-icon" src="https://avatars.githubusercontent.com/u/51534?v=3&s=36" width="18" height="18"> <a href="https://github.com/eriwen">Eric Wendelin</a> </div> <div class="post-category"> <svg width="16px" height="16px" viewBox="0 0 16 12" class="category-general-icon" 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" stroke-linecap="round" stroke-linejoin="round"> <g stroke="#02303A"> <polygon id="Stroke-3370" points="5 2.5 0.5 2.5 0.5 13.5 15.5 13.5 15.5 4.5 7 4.5"></polygon> </g> </g> </svg> <a style="margin-left: 4px;" href="https://blog.gradle.org/category/general">General</a> </div> </div> <p>This post introduces a new library called <a href="https://github.com/gradle/exemplar">Exemplar</a>. The goal of Exemplar is to ensure that users get outputs that you expect them to see. It handles sample discovery, normalization (semantically equivalent results, perhaps from different environments), and flexible output verification. It invokes any command-line tool in the environment to be invoked. You can also invoke <code class="language-plaintext highlighter-rouge">curl</code>, for example, to verify service API responses.</p> <p>Gradle uses this library to verify examples in docs and guides, and remove boilerplate from integration tests.</p> <p>Exemplar can be configured using a JUnit test runner (recommended) or using its APIs. See examples below and in the <a href="https://github.com/gradle/exemplar">Exemplar GitHub repo</a>.</p> <p><img src="/images/exemplar-information-flow.png" alt="Exemplar Information Flow" /></p> <h2 id="use-cases-for-exemplar">Use cases for Exemplar</h2> <p>It’s important that... <p><a href="https://blog.gradle.org/documentation-samples-testing-exemplar">❯ Read more</a></p> </article> <article class="post"> <h1 class="post-title"> <a href="https://blog.gradle.org/stop-rerunning-tests">Stop rerunning your tests</a> </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="2018-09-08T00:00:00-04:00">September 8, 2018</time> </div> <div class="post-author"> <img class="post-meta-icon" src="https://avatars.githubusercontent.com/u/1191797?v=3&s=36" width="18" height="18"> <a href="https://github.com/oehme">Stefan Oehme</a> </div> <div class="post-category"> <svg width="16px" height="16px" viewBox="0 0 16 12" class="category-general-icon" 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" stroke-linecap="round" stroke-linejoin="round"> <g stroke="#02303A"> <polygon id="Stroke-3370" points="5 2.5 0.5 2.5 0.5 13.5 15.5 13.5 15.5 4.5 7 4.5"></polygon> </g> </g> </svg> <a style="margin-left: 4px;" href="https://blog.gradle.org/category/general">General</a> </div> </div> <p>Tests are usually the longest running operation in your development process. Running them unnecessarily is the ultimate time waster. Gradle helps you avoid this cost with its <a href="https://docs.gradle.org/current/userguide/build_cache.html">build cache</a> and <a href="https://docs.gradle.org/current/userguide/more_about_tasks.html#sec:up_to_date_checks">incremental build</a> features. It knows when any of your test inputs, like your code, your dependencies or system properties, have changed. If everything stays the same, Gradle will skip the test run, saving you a lot of time.</p> <p>So you can imagine my desperation when I see snippets like this on StackOverflow:</p> <div class="language-groovy highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">tasks</span><span class="o">.</span><span class="na">withType</span><span class="o">(</span><span class="n">Test</span><span class="o">)</span> <span class="o">{</span> <span class="n">outputs</span><span class="o">.</span><span class="na">upToDateWhen</span> <span class="o">{</span> <span class="kc">false</span> <span class="o">}</span> <span class="o">}</span> </code></pre></div></div> <p>Let’s talk about what this means and why it is a bad... <p><a href="https://blog.gradle.org/stop-rerunning-tests">❯ Read more</a></p> </article> <article class="post"> <h1 class="post-title"> <a href="https://blog.gradle.org/unable-to-download-maven-central-bintray">Fixing Gradle dependency resolution when TLS v1.1 and v1.0 support is discontinued</a> </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="2018-06-21T00:00:00-04:00">June 21, 2018</time> </div> <div class="post-author"> <img class="post-meta-icon" src="https://avatars.githubusercontent.com/u/51534?v=3&s=36" width="18" height="18"> <a href="https://github.com/eriwen">Eric Wendelin</a> </div> <div class="post-category"> <svg width="16px" height="16px" viewBox="0 0 16 12" class="category-general-icon" 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" stroke-linecap="round" stroke-linejoin="round"> <g stroke="#02303A"> <polygon id="Stroke-3370" points="5 2.5 0.5 2.5 0.5 13.5 15.5 13.5 15.5 4.5 7 4.5"></polygon> </g> </g> </svg> <a style="margin-left: 4px;" href="https://blog.gradle.org/category/general">General</a> </div> </div> <p>Maven Central and Bintray have announced that they will discontinue support for TLS v1.1 and below. Here’s what you need to know to correct your Gradle builds if you’re affected.</p> <p><em>You will need to take action if you are using Java 6 or 7 and using Gradle versions 2.1 through 4.8.</em></p> <h3 id="how-to-check-if-youre-affected">How to check if you’re affected</h3> <p>You may already be getting one of the following errors from your build after an error message saying: “Could not resolve [coordinates]”:</p> <blockquote> <p>Received fatal alert: protocol_version</p> </blockquote> <p>or</p> <blockquote> <p>peer not authenticated</p> </blockquote> <p><a href="https://blog.gradle.org/unable-to-download-maven-central-bintray">❯ Read more</a></p> </article> <article class="post"> <h1 class="post-title"> <a href="https://blog.gradle.org/kotlin-build-cache-use">Using Gradle build cache with Kotlin</a> </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="2018-02-06T00:00:00-05:00">February 6, 2018</time> </div> <div class="post-author"> <img class="post-meta-icon" src="https://avatars.githubusercontent.com/u/51534?v=3&s=36" width="18" height="18"> <a href="https://github.com/eriwen">Eric Wendelin</a> </div> <div class="post-category"> <svg width="16px" height="16px" viewBox="0 0 16 12" class="category-general-icon" 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" stroke-linecap="round" stroke-linejoin="round"> <g stroke="#02303A"> <polygon id="Stroke-3370" points="5 2.5 0.5 2.5 0.5 13.5 15.5 13.5 15.5 4.5 7 4.5"></polygon> </g> </g> </svg> <a style="margin-left: 4px;" href="https://blog.gradle.org/category/general">General</a> </div> </div> <p>A <a href="https://blog.gradle.org/introducing-gradle-build-cache">build cache</a> allows Gradle to reuse task output from <em>any previous invocation, including those from other machines</em>. <a href="https://blog.jetbrains.com/kotlin/2018/01/kotlin-1-2-20-is-out/">Kotlin 1.2.21</a> allows Kotlin projects to make use of build caching.</p> <p>The build cache works by storing compiled classes, test outputs, and other build artifacts in a cache, taking into account all task inputs, including input file contents, relevant classpaths, and task configuration.</p> <p><img src="https://blog.gradle.org/images/kotlin-build-cache/build-cache-topological-diagram.png" alt="Build Cache topological diagram" /></p> <p>This frequently results in <em>faster builds</em>. The following chart shows aggregated build time with and without the build cache for part of Gradle’s CI:</p> <p><img src="https://blog.gradle.org/images/kotlin-build-cache/build-cache-total-build-minutes.png" alt="Build minutes saved with Gradle build cache" /></p> <p>In this post, we’ll explain how you can use Gradle’s build cache to avoid unnecessary Kotlin compilation to... <p><a href="https://blog.gradle.org/kotlin-build-cache-use">❯ Read more</a></p> </article> <article class="post"> <h1 class="post-title"> <a href="https://blog.gradle.org/mrjars">Multi-release JARs - Good or bad idea?</a> </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="2017-12-19T00:00:00-05:00">December 19, 2017</time> </div> <div class="post-author"> <img class="post-meta-icon" src="https://avatars.githubusercontent.com/u/316357?v=3&s=36" width="18" height="18"> <a href="https://github.com/melix">Cédric Champeau</a> </div> <div class="post-category"> <svg width="16px" height="16px" viewBox="0 0 16 12" class="category-general-icon" 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" stroke-linecap="round" stroke-linejoin="round"> <g stroke="#02303A"> <polygon id="Stroke-3370" points="5 2.5 0.5 2.5 0.5 13.5 15.5 13.5 15.5 4.5 7 4.5"></polygon> </g> </g> </svg> <a style="margin-left: 4px;" href="https://blog.gradle.org/category/general">General</a> </div> </div> <p>With Java 9 came a new feature of the Java runtime called multi-release jars. For us at Gradle, it’s probably one of the most controversial additions to the platform. TL/DR, we think it’s a wrong answer to a real problem. This post will explain why we think so, but also explain how you can build such jars if you really want to.</p> <p><a href="http://openjdk.java.net/jeps/238">Multi-release JARs</a>, aka MRJARs, are a new feature of the Java platform, included in the Java 9 JDK. In this post, we will elaborate on the significant risks of adopting this technology and provide how one can produce and consume multi-release JARs with Gradle, if desired.</p> <p>In a nutshell, multi-release jars allow you to package several versions of the same class, for consumption by different runtimes. For example, if you run on JDK 8, the Java runtime would use the Java 8 version of the class, but if you run on Java 9, it would use the Java 9 specific implementation. Similarly, if a version is built for the upcoming Java 10 release, then the runtime would use it instead of the Java 9 and default (Java 8) versions.</p> <p><a href="https://blog.gradle.org/mrjars">❯ Read more</a></p> </article> <article class="post"> <h1 class="post-title"> <a href="https://blog.gradle.org/java-9-support-update">State of Gradle Java 9 Support</a> </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="2017-10-17T00:00:00-04:00">October 17, 2017</time> </div> <div class="post-author"> <img class="post-meta-icon" src="https://avatars.githubusercontent.com/u/51534?v=3&s=36" width="18" height="18"> <a href="https://github.com/eriwen">Eric Wendelin</a> </div> <div class="post-category"> <svg width="16px" height="16px" viewBox="0 0 16 12" class="category-general-icon" 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" stroke-linecap="round" stroke-linejoin="round"> <g stroke="#02303A"> <polygon id="Stroke-3370" points="5 2.5 0.5 2.5 0.5 13.5 15.5 13.5 15.5 4.5 7 4.5"></polygon> </g> </g> </svg> <a style="margin-left: 4px;" href="https://blog.gradle.org/category/general">General</a> </div> </div> <p>This post provides an overview of Gradle’s Java 9 support, touching on runtime, cross-compilation, MRJARs, and Jigsaw modules support. We’ve fielded lots of questions since Java 9 was released last month, and decided it best to answer here.</p> <h2 id="what-gradle-supports-as-of-version-421">What Gradle supports as of version 4.2.1</h2> <p>As of Gradle 4.2.1, building and running Java applications using major distributions of JDK 9 such as Oracle JDK9, OpenJDK9 and Azul JDK9 is fully supported. Further, cross-compilation (built by JDK9 but runs on JDK8) is supported.</p> <p>Some builds will break when upgrading to Java 9, regardless of build tool used. The Java team have made good and necessary changes to the JDK to facilitate better software architecture and security, but this has meant removing access to some APIs. Even if your project is ready, some tools and Gradle plugins have not yet been updated to work with Java 9.</p> <p>There is no convenience methods for consuming and assembling Multi-Release JARs, but you can take a look at this <a href="https://github.com/melix/mrjar-gradle">MRJAR-gradle example</a> if you desire to use them.</p> <p><a href="https://blog.gradle.org/java-9-support-update">❯ Read more</a></p> </article> <article class="post"> <h1 class="post-title"> <a href="https://blog.gradle.org/kotlin-scripting-update">The Road to Gradle Script Kotlin 1.0</a> </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="2016-10-26T00:00:00-04:00">October 26, 2016</time> </div> <div class="post-author"> <img class="post-meta-icon" src="https://avatars.githubusercontent.com/u/51689?v=3&s=36" width="18" height="18"> <a href="https://github.com/bamboo">Rodrigo B. de Oliveira</a> </div> <div class="post-category"> <svg width="16px" height="16px" viewBox="0 0 16 12" class="category-general-icon" 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" stroke-linecap="round" stroke-linejoin="round"> <g stroke="#02303A"> <polygon id="Stroke-3370" points="5 2.5 0.5 2.5 0.5 13.5 15.5 13.5 15.5 4.5 7 4.5"></polygon> </g> </g> </svg> <a style="margin-left: 4px;" href="https://blog.gradle.org/category/general">General</a> </div> </div> <p>Five months ago we <a href="/kotlin-meets-gradle">announced the first pre-release of Gradle Script Kotlin</a>, and we thought now would be a good time to review the progress we’ve made since. We have shipped eight additional pre-releases during that time, and the road to 1.0 is looking clearer every day. So let’s take a look at the ground we’ve covered so far and where we’re going from here, shall we?</p> <h2 id="v010">v0.1.0</h2> <p>As you may recall, this is what our <a href="https://github.com/gradle/gradle-script-kotlin/blob/cc14d3/samples/hello-world/build.gradle.kts"><code class="language-plaintext highlighter-rouge">hello-world</code> sample</a> looked like at the time of our first release:</p> <div class="language-kotlin highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">import</span> <span class="nn">org.gradle.api.plugins.*</span> <span class="k">import</span> <span class="nn">org.gradle.script.lang.kotlin.*</span> <span class="n">apply</span><span class="p"><</span><span class="nc">ApplicationPlugin</span><span class="p">>()</span> <span class="n">configure</span><span class="p"><</span><span class="nc">ApplicationPluginConvention</span><span class="p">></span> <span class="p">{</span> <span class="n">mainClassName</span> <span class="p">=</span> <span class="s">"samples.HelloWorld"</span> <span class="p">}</span> <span class="nf">repositories</span> <span class="p">{</span> <span class="nf">jcenter</span><span class="p">()</span> <span class="p">}</span> <span class="nf">dependencies</span> <span class="p">{</span> <span class="s">"testCompile"</span><span class="p">(</span><span class="s">"junit:junit:4.12"</span><span class="p">)</span> <span class="p">}</span> </code></pre></div></div> <p><a href="https://blog.gradle.org/kotlin-scripting-update">❯ Read more</a></p> </article> <article class="post"> <h1 class="post-title"> <a href="https://blog.gradle.org/github-issues">Now Open: GitHub Issues for Gradle</a> </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="2016-10-19T00:00:00-04:00">October 19, 2016</time> </div> <div class="post-author"> <img class="post-meta-icon" src="https://avatars.githubusercontent.com/u/51534?v=3&s=36" width="18" height="18"> <a href="https://github.com/eriwen">Eric Wendelin</a> </div> <div class="post-category"> <svg width="16px" height="16px" viewBox="0 0 16 12" class="category-general-icon" 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" stroke-linecap="round" stroke-linejoin="round"> <g stroke="#02303A"> <polygon id="Stroke-3370" points="5 2.5 0.5 2.5 0.5 13.5 15.5 13.5 15.5 4.5 7 4.5"></polygon> </g> </g> </svg> <a style="margin-left: 4px;" href="https://blog.gradle.org/category/general">General</a> </div> </div> <p>Gradle has been an open-source project since its inception, but as a team we haven’t always lived up to the spirit of modern open-source collaboration. For example, we haven’t made it easy for folks to stay abreast of what we’re working on, and we haven’t had a clear and simple process for users to submit feature requests or bugs against a proper issue tracker.</p> <p>We’re very happy to announce that all of that is changing today. We’ve opened up GitHub Issues on the Gradle repository, and what follows are the immediate, medium-, and long-term changes we’re making to put—and keep!—the needs of the Gradle community front and center.</p> <p><a href="https://blog.gradle.org/github-issues">❯ Read more</a></p> </article> <article class="post"> <h1 class="post-title"> <a href="https://blog.gradle.org/hello-again">Hello, Again</a> </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="2016-09-26T00:00:00-04:00">September 26, 2016</time> </div> <div class="post-author"> <img class="post-meta-icon" src="https://avatars.githubusercontent.com/u/301810?v=3&s=36" width="18" height="18"> <a href="https://github.com/cbeams">Chris Beams</a> </div> <div class="post-category"> <svg width="16px" height="16px" viewBox="0 0 16 12" class="category-general-icon" 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" stroke-linecap="round" stroke-linejoin="round"> <g stroke="#02303A"> <polygon id="Stroke-3370" points="5 2.5 0.5 2.5 0.5 13.5 15.5 13.5 15.5 4.5 7 4.5"></polygon> </g> </g> </svg> <a style="margin-left: 4px;" href="https://blog.gradle.org/category/general">General</a> </div> </div> <p>Welcome to the new Gradle blog. On behalf of the whole team, it’s my pleasure to write this first post and share a bit about what we’re up to.</p> <p>Mainly, we’re putting together this new blog because we want to make sure users find out about the most important developments in Gradle-land. Our team has grown rapidly over the last couple years, and as a result we’ve shipped many new features and improvements. All too often, though, we find that would-be users never hear about them. This recent tweet provides a perfect example:</p> <blockquote class="twitter-tweet" data-lang="en"><p lang="en" dir="ltr">I read news, I try to keep up-to-date. So how did I miss that <a href="https://twitter.com/gradle">@gradle</a> can build <a href="https://twitter.com/playframework">@playframework</a>? Gotta look into this.</p>— Cristian Duicu (@cduicu) <a href="https://twitter.com/cduicu/status/779301788654723072">September 23, 2016</a></blockquote> <script async="" src="//platform.twitter.com/widgets.js" charset="utf-8"></script> <p>Cristian’s question is a fair one. We first shipped Play support over a year ago; we mentioned it in our Gradle 2.6 <a href="https://discuss.gradle.org/t/gradle-2-6-released/11092">forum announcement</a> and <a href="https://docs.gradle.org/2.6/release-notes">release notes</a>, and we wrote <a href="https://docs.gradle.org/3.1/userguide/play_plugin.html">a chapter about it</a> in our user manual. Still, Cristian—and probably many others—missed it. How is that?</p> <p><a href="https://blog.gradle.org/hello-again">❯ Read more</a></p> </article> <article class="post"> <h1 class="post-title"> <a href="https://blog.gradle.org/unleash-the-daemon">Gradle 3.0 M1: Unleash the Daemon!</a> </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="2016-06-09T00:00:00-04:00">June 9, 2016</time> </div> <div class="post-author"> <img class="post-meta-icon" src="https://avatars.githubusercontent.com/u/301810?v=3&s=36" width="18" height="18"> <a href="https://github.com/cbeams">Chris Beams</a> </div> <div class="post-category"> <svg width="16px" height="16px" viewBox="0 0 16 12" class="category-general-icon" 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" stroke-linecap="round" stroke-linejoin="round"> <g stroke="#02303A"> <polygon id="Stroke-3370" points="5 2.5 0.5 2.5 0.5 13.5 15.5 13.5 15.5 4.5 7 4.5"></polygon> </g> </g> </svg> <a style="margin-left: 4px;" href="https://blog.gradle.org/category/general">General</a> </div> </div> <p>The first milestone release toward Gradle 3.0 has <a href="https://github.com/gradle/gradle/releases/tag/v3.0.0-M1">just been published</a>, and among many smaller improvements, it contains two major features we’d like to get your feedback on.</p> <p>The first feature is <strong>support for writing Gradle build scripts in Kotlin</strong>, and you can read all about it in last month’s <a href="/kotlin-meets-gradle">Kotlin meets Gradle</a> blog post. While still in the early stages of development, this functionality is now available out of the box with Gradle 3.0 M1, and we’d love to hear what you think. See the <em>Gradle Script Kotlin</em> <a href="https://github.com/gradle/gradle-script-kotlin/releases/tag/v0.1.0">0.1.0 release notes</a> for complete details and getting started instructions.</p> <p>The second feature is that <strong>the Gradle Daemon is now enabled by default.</strong> This is a <em>big deal</em>, and I... <p><a href="https://blog.gradle.org/unleash-the-daemon">❯ Read more</a></p> </article> </div> </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 href="https://blog.gradle.org/category/features" itemprop="url"><span itemprop="name">New Features</span></a> </li> <li> <a href="https://newsletter.gradle.org/" itemprop="url"><span itemprop="name">Newsletter</span></a> </li> <li> <a href="https://blog.gradle.org/category/events" itemprop="url"><span itemprop="name">Events</span></a> </li> <li> <a style="color: rgba(2, 48, 58, 1);" 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"> <!-- Cookie Consent Holder --> <div id="analytics-consent-div"></div> <div class="site-footer__contents"> <div class="site-footer__copy">© Gradle Inc. <time datetime="2025-01-07T05:46:27-05:00">2025</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>