{"id":10066,"date":"2021-10-19T13:54:51","date_gmt":"2021-10-19T11:54:51","guid":{"rendered":"https:\/\/vived.io\/jvm-tuesday-vol-60-string-templates-i-maven\/"},"modified":"2022-09-19T13:10:47","modified_gmt":"2022-09-19T11:10:47","slug":"jvm-tuesday-vol-60-string-templates-i-maven","status":"publish","type":"post","link":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-60-string-templates-i-maven\/","title":{"rendered":"JVM Tuesday vol. 60 &#8211; String Templates i Maven"},"content":{"rendered":"\n<h2 id=\"1-string-templates-w-javie-wygladaja-naprawde-poteznie\" data-num=1>1.&nbsp;String Templates w Javie wygl\u0105daj\u0105 naprawd\u0119 pot\u0119\u017cnie \ud83d\udcaa<\/h2>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/string-concatenation-41729363.png\" alt=\"String Concatenation | Programmer Humor Meme on ME.ME\"\/><\/figure><\/div>\n\n\n<p>Troch\u0119 wida\u0107, jak bardzo przez lata zaniedbanym by\u0142 temat string\u00f3w w Javie. Od kiedy w ekosystemie pojawi\u0142o si\u0119 \u201cprzyzwolenie\u201d na grzebanie w temacie, w zasadzie co chwil\u0119 s\u0142yszymy o jakich\u015b nowych propozycjach, w jaki spos\u00f3b mo\u017cna by poprawi\u0107 ich obs\u0142ug\u0119. Java 11 wprowadzi\u0142a nowe metody, p\u00f3\u017aniej przez kilka wersji \u201cwygrzewa\u0142y si\u0119\u201d bloki tekstu. W niedalekiej przysz\u0142o\u015bci czeka\u0107 nas mo\u017ce za\u015b kolejna iteracja podej\u015bcia do string\u00f3w &#8211; tym razem poprzez wprowadzenie String Templates.<\/p>\n\n\n\n<p>Na pierwszy rzut oka wydaje si\u0119 to by\u0107 ma\u0142o interesuj\u0105ce &#8211; w ko\u0144cu w zasadzie ka\u017cdy inny JVMowy j\u0119zyk posiada ju\u017c wsparcie dla jakiej\u015b formy interpolacji string\u00f3w. Jak to jednak bywa z Jav\u0105, kiedy jej tw\u00f3rcy zabieraj\u0105 si\u0119 za jak\u0105\u015b funkcjonalno\u015b\u0107, robi\u0105 to z przytupem. Jak pisz\u0105 w JEPie, wi\u0119kszo\u015b\u0107 j\u0119zyk\u00f3w wspiera wy\u0142\u0105cznie proste formy interpolacji:<\/p>\n\n\n\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-\">var greeting = `Hello, $name, I am $age years old`<\/code><\/pre>\n\n\n\n<p>Powy\u017csze rozwi\u0105zanie jest do\u015b\u0107 ograniczone; parametry nie s\u0105 w \u017caden spos\u00f3b weryfikowane ani przekszta\u0142cane, a wynik jest bardzo \u201clinearn\u0105\u201d sklejk\u0105 poszczeg\u00f3lnych parametr\u00f3w.<\/p>\n\n\n\n<p>Rozwi\u0105zanie zaprezentowane przez tw\u00f3rc\u00f3w Javy jest o wiele bardziej skomplikowane. Ma si\u0119 ono opiera\u0107 o tak zwane Polityki Templatingu, kt\u00f3re to definiowa\u0107 maj\u0105 obs\u0142ugi poszczeg\u00f3lnych parametr\u00f3w<\/p>\n\n\n\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-\">interface TemplatePolicy&lt;T&gt; {\n    T apply(String template, List&lt;Object&gt; parameters);\n}<\/code><\/pre>\n\n\n\n<p>Prostym przyk\u0142adem u\u017cyciem m\u00f3g\u0142by by\u0107 poni\u017cszy formatter:<\/p>\n\n\n\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-\">String s = FMT.&quot;Hello %s\\{name}, I am %10d\\{age} years old.&quot;;<\/code><\/pre>\n\n\n\n<p>gdzie FMT jest implementacj\u0105 TemplatePolicy, kt\u00f3ra zdefiniowane ma regu\u0142y formatuj\u0105ce (w tym przypadku np. w jaki spos\u00f3b sformatowa\u0107 w stringu konkretne parametry.<\/p>\n\n\n\n<p>Na prostych ma si\u0119 jednak nie sko\u0144czy\u0107 i wspomniany JEP pokazuje te\u017c bardziej z\u0142o\u017cone u\u017cycia, jak np. blokach JSON czy zapytaniach SQL. W przypadku tych ostatnich, idziemy w kierunku do\u015b\u0107 szalonych rozwi\u0105za\u0144, gdzie TemplatePolicy mog\u0142oby by\u0107 implementowane przez samo po\u0142\u0105czenie:<\/p>\n\n\n\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-\">var query = connection.&quot;SELECT * FROM \\{table}&quot;;<\/code><\/pre>\n\n\n\n<p>Aczkolwiek tutaj tw\u00f3rcy s\u0105 szczerzy, \u017ce nie jest to jeszcze wersja ostateczna. Zobaczymy w jakim kierunku b\u0119dzie si\u0119 to rozwija\u0142o. Je\u015bli chcieliby\u015bcie pozna\u0107 wi\u0119cej szczeg\u00f3\u0142\u00f3w: <a href=\"https:\/\/openjdk.java.net\/jeps\/8273943\">oryginalny JEP<\/a>.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/yufse665ypa41.jpg\" alt=\"js be like: ProgrammerHumor\"\/><figcaption>Og\u00f3lnie je\u015bli chodzi o \u0142\u0105czenie string\u00f3w, <\/figcaption><\/figure><\/div>\n\n\n<h2 id=\"2-dowiedz-sie-jak-optymalizowac-czas-mavena\" data-num=2>2.&nbsp;Dowiedz si\u0119 jak optymalizowa\u0107 czas Mavena? \ud83d\udc07<\/h2>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/62887925.jpg\" alt=\"Didn't learn Maven World Moved on to Gradle! - Success Kid | Meme Generator\"\/><\/figure><\/div>\n\n\n<p>Ostatnio sporo m\u00f3wi si\u0119 o Gradle, do tego stopnia, \u017ce Maven wydaje si\u0119 nie by\u0107 ju\u017c u\u017cywany.. Jest to oczywi\u015bcie zupe\u0142na nieprawda, w rzeczywisto\u015bci to w\u0142a\u015bnie Maven ci\u0105gle kr\u00f3luje we wszelkich statystykach, po prostu wypad\u0142 z \u0142ask bloger\u00f3w czy innego rodzaju technologicznych \u201cinfluencer\u00f3w\u201d. Dlatego te\u017c z pewn\u0105 rado\u015bci\u0105 przytuli\u0142em teksty od Nicolasa Fr\u00e4nkela, kt\u00f3ry to przygl\u0105da\u0142 si\u0119 tematowi przyspieszania Mavenowych build\u00f3w.<\/p>\n\n\n\n<p>Opracowania s\u0105 szczeg\u00f3lnie ciekawe nie tylko ze wzgl\u0119du na lekkie pi\u00f3ro Nicolasa (bardzo lubi\u0119 jego publikacje), ale r\u00f3wnie\u017c ze wzgl\u0119du na przyj\u0119ty przez niego zakres. <a href=\"https:\/\/blog.frankel.ch\/faster-maven-builds\/1\/\">Pierwszy z tekst\u00f3w<\/a> jest przegl\u0105dem poszczeg\u00f3lnych flag, kt\u00f3re w zaskakuj\u0105cy (zw\u0142aszcza dla ludzi, kt\u00f3rzy nigdy nie mieli okazji wgry\u017a\u0107 si\u0119 w Mavena) spos\u00f3b przyspieszaj\u0105 budowanie aplikacji. Mo\u017cna si\u0119 wi\u0119c przyjrze\u0107 sposobom paralelizacji test\u00f3w, maksymalizacji u\u017cycia rdzeni procesora czy efektywniejszym u\u017cyciu mavenowego deamona.<\/p>\n\n\n\n<p>To jednak nie wszystko &#8211; szczeg\u00f3lnie ciekawa z mojej perspektywy <a href=\"https:\/\/blog.frankel.ch\/faster-maven-builds\/2\/\">jest druga cz\u0119\u015b\u0107<\/a>. Pokazuje ona bowiem, jak w efektywny spos\u00f3b u\u017cywa\u0107 Mavena w \u015brodowisku kontenerowym. Bior\u0105c pod uwag\u0119, jak cz\u0119sto do budowania aplikacji w \u015brodowisku CI\/CD u\u017cywamy np. takiego Dockera, znajomo\u015b\u0107 technik optymalizacyjnych czy sposob\u00f3w cache\u2019owania warstw itd mo\u017ce by\u0107 naprawd\u0119 cenn\u0105 informacj\u0105. Dlatego je\u015bli jeszcze nie przesiedli\u015bcie si\u0119 na Gradle &#8211; naprawd\u0119 polecam zerkn\u0105\u0107 do podlinkowanych artyku\u0142\u00f3w.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/r_1864904_UskfR.jpg\" alt=\"devRant - A fun community for developers to connect over code, tech &amp; life  as a programmer\"\/><\/figure><\/div>","protected":false},"excerpt":{"rendered":"<p>Je\u017celi zastanawiali\u015bcie si\u0119 kiedykolwiek, kiedy najmniej dzieje si\u0119 w \u015bwiecie technologii (przynajmniej tych JVMowych), to w oparciu o dane mog\u0119 Wam powiedzie\u0107, \u017ce jest to drugi tydzie\u0144 pa\u017adziernika \ud83d\ude09. Dlatego dzisiaj mamy dla Was tylko dwie pozycje: nowego JEPa oraz ciekawy artyku\u0142 o tym, jak bardzo przyspieszy\u0107 mo\u017cna Mavenowe buildy. <\/p>\n","protected":false},"author":10,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[259],"tags":[],"class_list":["post-10066","post","type-post","status-publish","format-standard","hentry","category-jvm-pl"],"acf":{"estimated_reading_time":"3","weekly_summary":true,"feature_image_blog":false,"push_notification_image":false,"feature_image_visible":false},"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.0 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>JVM Tuesday vol. 60 - String Templates i Maven - Vived<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-60-string-templates-i-maven\/\" \/>\n<meta property=\"og:locale\" content=\"pl_PL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"JVM Tuesday vol. 60 - String Templates i Maven - Vived\" \/>\n<meta property=\"og:description\" content=\"Je\u017celi zastanawiali\u015bcie si\u0119 kiedykolwiek, kiedy najmniej dzieje si\u0119 w \u015bwiecie technologii (przynajmniej tych JVMowych), to w oparciu o dane mog\u0119 Wam powiedzie\u0107, \u017ce jest to drugi tydzie\u0144 pa\u017adziernika \ud83d\ude09. Dlatego dzisiaj mamy dla Was tylko dwie pozycje: nowego JEPa oraz ciekawy artyku\u0142 o tym, jak bardzo przyspieszy\u0107 mo\u017cna Mavenowe buildy.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-60-string-templates-i-maven\/\" \/>\n<meta property=\"og:site_name\" content=\"Vived\" \/>\n<meta property=\"article:published_time\" content=\"2021-10-19T11:54:51+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-09-19T11:10:47+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/10\/Screenshot-2021-10-19-at-13.54.05.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1918\" \/>\n\t<meta property=\"og:image:height\" content=\"1002\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Artur Skowro\u0144ski\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-60-string-templates-i-maven\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-60-string-templates-i-maven\/\"},\"author\":{\"name\":\"Artur Skowro\u0144ski\",\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/person\/0eb0878110cb27edfbfe46e841fe6db3\"},\"headline\":\"JVM Tuesday vol. 60 &#8211; String Templates i Maven\",\"datePublished\":\"2021-10-19T11:54:51+00:00\",\"dateModified\":\"2022-09-19T11:10:47+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-60-string-templates-i-maven\/\"},\"wordCount\":611,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/vived.io\/pl\/#organization\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-60-string-templates-i-maven\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/string-concatenation-41729363.png\",\"articleSection\":[\"JVM\"],\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-60-string-templates-i-maven\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-60-string-templates-i-maven\/\",\"url\":\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-60-string-templates-i-maven\/\",\"name\":\"JVM Tuesday vol. 60 - String Templates i Maven - Vived\",\"isPartOf\":{\"@id\":\"https:\/\/vived.io\/pl\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-60-string-templates-i-maven\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-60-string-templates-i-maven\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/string-concatenation-41729363.png\",\"datePublished\":\"2021-10-19T11:54:51+00:00\",\"dateModified\":\"2022-09-19T11:10:47+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-60-string-templates-i-maven\/#breadcrumb\"},\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-60-string-templates-i-maven\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-60-string-templates-i-maven\/#primaryimage\",\"url\":\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/string-concatenation-41729363.png\",\"contentUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/string-concatenation-41729363.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-60-string-templates-i-maven\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Strona g\u0142\u00f3wna\",\"item\":\"https:\/\/vived.io\/pl\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"JVM Tuesday vol. 60 &#8211; String Templates i Maven\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/vived.io\/pl\/#website\",\"url\":\"https:\/\/vived.io\/pl\/\",\"name\":\"Vived\",\"description\":\"platform empowering IT people and technology companies to synergic growth\",\"publisher\":{\"@id\":\"https:\/\/vived.io\/pl\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/vived.io\/pl\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pl-PL\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/vived.io\/pl\/#organization\",\"name\":\"Vived\",\"url\":\"https:\/\/vived.io\/pl\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/vived.io\/wp-content\/uploads\/2020\/03\/logo_vived_color.png\",\"contentUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2020\/03\/logo_vived_color.png\",\"width\":136,\"height\":45,\"caption\":\"Vived\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/person\/0eb0878110cb27edfbfe46e841fe6db3\",\"name\":\"Artur Skowro\u0144ski\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/29055786486c8b9dc1507f2744221c5bdb8d7ef6e6217ced0326dd3296aea6ed?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/29055786486c8b9dc1507f2744221c5bdb8d7ef6e6217ced0326dd3296aea6ed?s=96&d=mm&r=g\",\"caption\":\"Artur Skowro\u0144ski\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"JVM Tuesday vol. 60 - String Templates i Maven - Vived","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-60-string-templates-i-maven\/","og_locale":"pl_PL","og_type":"article","og_title":"JVM Tuesday vol. 60 - String Templates i Maven - Vived","og_description":"Je\u017celi zastanawiali\u015bcie si\u0119 kiedykolwiek, kiedy najmniej dzieje si\u0119 w \u015bwiecie technologii (przynajmniej tych JVMowych), to w oparciu o dane mog\u0119 Wam powiedzie\u0107, \u017ce jest to drugi tydzie\u0144 pa\u017adziernika \ud83d\ude09. Dlatego dzisiaj mamy dla Was tylko dwie pozycje: nowego JEPa oraz ciekawy artyku\u0142 o tym, jak bardzo przyspieszy\u0107 mo\u017cna Mavenowe buildy.","og_url":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-60-string-templates-i-maven\/","og_site_name":"Vived","article_published_time":"2021-10-19T11:54:51+00:00","article_modified_time":"2022-09-19T11:10:47+00:00","og_image":[{"width":1918,"height":1002,"url":"https:\/\/vived.io\/wp-content\/uploads\/2021\/10\/Screenshot-2021-10-19-at-13.54.05.png","type":"image\/png"}],"author":"Artur Skowro\u0144ski","twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-60-string-templates-i-maven\/#article","isPartOf":{"@id":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-60-string-templates-i-maven\/"},"author":{"name":"Artur Skowro\u0144ski","@id":"https:\/\/vived.io\/pl\/#\/schema\/person\/0eb0878110cb27edfbfe46e841fe6db3"},"headline":"JVM Tuesday vol. 60 &#8211; String Templates i Maven","datePublished":"2021-10-19T11:54:51+00:00","dateModified":"2022-09-19T11:10:47+00:00","mainEntityOfPage":{"@id":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-60-string-templates-i-maven\/"},"wordCount":611,"commentCount":0,"publisher":{"@id":"https:\/\/vived.io\/pl\/#organization"},"image":{"@id":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-60-string-templates-i-maven\/#primaryimage"},"thumbnailUrl":"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/string-concatenation-41729363.png","articleSection":["JVM"],"inLanguage":"pl-PL","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/vived.io\/pl\/jvm-tuesday-vol-60-string-templates-i-maven\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-60-string-templates-i-maven\/","url":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-60-string-templates-i-maven\/","name":"JVM Tuesday vol. 60 - String Templates i Maven - Vived","isPartOf":{"@id":"https:\/\/vived.io\/pl\/#website"},"primaryImageOfPage":{"@id":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-60-string-templates-i-maven\/#primaryimage"},"image":{"@id":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-60-string-templates-i-maven\/#primaryimage"},"thumbnailUrl":"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/string-concatenation-41729363.png","datePublished":"2021-10-19T11:54:51+00:00","dateModified":"2022-09-19T11:10:47+00:00","breadcrumb":{"@id":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-60-string-templates-i-maven\/#breadcrumb"},"inLanguage":"pl-PL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/vived.io\/pl\/jvm-tuesday-vol-60-string-templates-i-maven\/"]}]},{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-60-string-templates-i-maven\/#primaryimage","url":"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/string-concatenation-41729363.png","contentUrl":"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/string-concatenation-41729363.png"},{"@type":"BreadcrumbList","@id":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-60-string-templates-i-maven\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Strona g\u0142\u00f3wna","item":"https:\/\/vived.io\/pl\/"},{"@type":"ListItem","position":2,"name":"JVM Tuesday vol. 60 &#8211; String Templates i Maven"}]},{"@type":"WebSite","@id":"https:\/\/vived.io\/pl\/#website","url":"https:\/\/vived.io\/pl\/","name":"Vived","description":"platform empowering IT people and technology companies to synergic growth","publisher":{"@id":"https:\/\/vived.io\/pl\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/vived.io\/pl\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pl-PL"},{"@type":"Organization","@id":"https:\/\/vived.io\/pl\/#organization","name":"Vived","url":"https:\/\/vived.io\/pl\/","logo":{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/vived.io\/pl\/#\/schema\/logo\/image\/","url":"https:\/\/vived.io\/wp-content\/uploads\/2020\/03\/logo_vived_color.png","contentUrl":"https:\/\/vived.io\/wp-content\/uploads\/2020\/03\/logo_vived_color.png","width":136,"height":45,"caption":"Vived"},"image":{"@id":"https:\/\/vived.io\/pl\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/vived.io\/pl\/#\/schema\/person\/0eb0878110cb27edfbfe46e841fe6db3","name":"Artur Skowro\u0144ski","image":{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/vived.io\/pl\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/29055786486c8b9dc1507f2744221c5bdb8d7ef6e6217ced0326dd3296aea6ed?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/29055786486c8b9dc1507f2744221c5bdb8d7ef6e6217ced0326dd3296aea6ed?s=96&d=mm&r=g","caption":"Artur Skowro\u0144ski"}}]}},"blocks_vived":[{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2>1.&nbsp;String Templates w Javie wygl\u0105daj\u0105 naprawd\u0119 pot\u0119\u017cnie \ud83d\udcaa<\/h2>\n","innerContent":["\n<h2>1.&nbsp;String Templates w Javie wygl\u0105daj\u0105 naprawd\u0119 pot\u0119\u017cnie \ud83d\udcaa<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/string-concatenation-41729363.png\" alt=\"String Concatenation | Programmer Humor Meme on ME.ME\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/string-concatenation-41729363.png\" alt=\"String Concatenation | Programmer Humor Meme on ME.ME\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Troch\u0119 wida\u0107, jak bardzo przez lata zaniedbanym by\u0142 temat string\u00f3w w Javie. Od kiedy w ekosystemie pojawi\u0142o si\u0119 \u201cprzyzwolenie\u201d na grzebanie w temacie, w zasadzie co chwil\u0119 s\u0142yszymy o jakich\u015b nowych propozycjach, w jaki spos\u00f3b mo\u017cna by poprawi\u0107 ich obs\u0142ug\u0119. Java 11 wprowadzi\u0142a nowe metody, p\u00f3\u017aniej przez kilka wersji \u201cwygrzewa\u0142y si\u0119\u201d bloki tekstu. W niedalekiej przysz\u0142o\u015bci czeka\u0107 nas mo\u017ce za\u015b kolejna iteracja podej\u015bcia do string\u00f3w - tym razem poprzez wprowadzenie String Templates.<\/p>\n","innerContent":["\n<p>Troch\u0119 wida\u0107, jak bardzo przez lata zaniedbanym by\u0142 temat string\u00f3w w Javie. Od kiedy w ekosystemie pojawi\u0142o si\u0119 \u201cprzyzwolenie\u201d na grzebanie w temacie, w zasadzie co chwil\u0119 s\u0142yszymy o jakich\u015b nowych propozycjach, w jaki spos\u00f3b mo\u017cna by poprawi\u0107 ich obs\u0142ug\u0119. Java 11 wprowadzi\u0142a nowe metody, p\u00f3\u017aniej przez kilka wersji \u201cwygrzewa\u0142y si\u0119\u201d bloki tekstu. W niedalekiej przysz\u0142o\u015bci czeka\u0107 nas mo\u017ce za\u015b kolejna iteracja podej\u015bcia do string\u00f3w - tym razem poprzez wprowadzenie String Templates.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Na pierwszy rzut oka wydaje si\u0119 to by\u0107 ma\u0142o interesuj\u0105ce - w ko\u0144cu w zasadzie ka\u017cdy inny JVMowy j\u0119zyk posiada ju\u017c wsparcie dla jakiej\u015b formy interpolacji string\u00f3w. Jak to jednak bywa z Jav\u0105, kiedy jej tw\u00f3rcy zabieraj\u0105 si\u0119 za jak\u0105\u015b funkcjonalno\u015b\u0107, robi\u0105 to z przytupem. Jak pisz\u0105 w JEPie, wi\u0119kszo\u015b\u0107 j\u0119zyk\u00f3w wspiera wy\u0142\u0105cznie proste formy interpolacji:<\/p>\n","innerContent":["\n<p>Na pierwszy rzut oka wydaje si\u0119 to by\u0107 ma\u0142o interesuj\u0105ce - w ko\u0144cu w zasadzie ka\u017cdy inny JVMowy j\u0119zyk posiada ju\u017c wsparcie dla jakiej\u015b formy interpolacji string\u00f3w. Jak to jednak bywa z Jav\u0105, kiedy jej tw\u00f3rcy zabieraj\u0105 si\u0119 za jak\u0105\u015b funkcjonalno\u015b\u0107, robi\u0105 to z przytupem. Jak pisz\u0105 w JEPie, wi\u0119kszo\u015b\u0107 j\u0119zyk\u00f3w wspiera wy\u0142\u0105cznie proste formy interpolacji:<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"prismatic\/blocks","attrs":[],"innerBlocks":[],"innerHTML":"\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-\">var greeting = `Hello, $name, I am $age years old`<\/code><\/pre>\n","innerContent":["\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-\">var greeting = `Hello, $name, I am $age years old`<\/code><\/pre>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Powy\u017csze rozwi\u0105zanie jest do\u015b\u0107 ograniczone; parametry nie s\u0105 w \u017caden spos\u00f3b weryfikowane ani przekszta\u0142cane, a wynik jest bardzo \u201clinearn\u0105\u201d sklejk\u0105 poszczeg\u00f3lnych parametr\u00f3w.<\/p>\n","innerContent":["\n<p>Powy\u017csze rozwi\u0105zanie jest do\u015b\u0107 ograniczone; parametry nie s\u0105 w \u017caden spos\u00f3b weryfikowane ani przekszta\u0142cane, a wynik jest bardzo \u201clinearn\u0105\u201d sklejk\u0105 poszczeg\u00f3lnych parametr\u00f3w.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Rozwi\u0105zanie zaprezentowane przez tw\u00f3rc\u00f3w Javy jest o wiele bardziej skomplikowane. Ma si\u0119 ono opiera\u0107 o tak zwane Polityki Templatingu, kt\u00f3re to definiowa\u0107 maj\u0105 obs\u0142ugi poszczeg\u00f3lnych parametr\u00f3w<\/p>\n","innerContent":["\n<p>Rozwi\u0105zanie zaprezentowane przez tw\u00f3rc\u00f3w Javy jest o wiele bardziej skomplikowane. Ma si\u0119 ono opiera\u0107 o tak zwane Polityki Templatingu, kt\u00f3re to definiowa\u0107 maj\u0105 obs\u0142ugi poszczeg\u00f3lnych parametr\u00f3w<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"prismatic\/blocks","attrs":[],"innerBlocks":[],"innerHTML":"\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-\">interface TemplatePolicy&lt;T> {\n    T apply(String template, List&lt;Object> parameters);\n}<\/code><\/pre>\n","innerContent":["\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-\">interface TemplatePolicy&lt;T> {\n    T apply(String template, List&lt;Object> parameters);\n}<\/code><\/pre>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Prostym przyk\u0142adem u\u017cyciem m\u00f3g\u0142by by\u0107 poni\u017cszy formatter:<\/p>\n","innerContent":["\n<p>Prostym przyk\u0142adem u\u017cyciem m\u00f3g\u0142by by\u0107 poni\u017cszy formatter:<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"prismatic\/blocks","attrs":[],"innerBlocks":[],"innerHTML":"\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-\">String s = FMT.\"Hello %s\\{name}, I am %10d\\{age} years old.\";<\/code><\/pre>\n","innerContent":["\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-\">String s = FMT.\"Hello %s\\{name}, I am %10d\\{age} years old.\";<\/code><\/pre>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>gdzie FMT jest implementacj\u0105 TemplatePolicy, kt\u00f3ra zdefiniowane ma regu\u0142y formatuj\u0105ce (w tym przypadku np. w jaki spos\u00f3b sformatowa\u0107 w stringu konkretne parametry.<\/p>\n","innerContent":["\n<p>gdzie FMT jest implementacj\u0105 TemplatePolicy, kt\u00f3ra zdefiniowane ma regu\u0142y formatuj\u0105ce (w tym przypadku np. w jaki spos\u00f3b sformatowa\u0107 w stringu konkretne parametry.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Na prostych ma si\u0119 jednak nie sko\u0144czy\u0107 i wspomniany JEP pokazuje te\u017c bardziej z\u0142o\u017cone u\u017cycia, jak np. blokach JSON czy zapytaniach SQL. W przypadku tych ostatnich, idziemy w kierunku do\u015b\u0107 szalonych rozwi\u0105za\u0144, gdzie TemplatePolicy mog\u0142oby by\u0107 implementowane przez samo po\u0142\u0105czenie:<\/p>\n","innerContent":["\n<p>Na prostych ma si\u0119 jednak nie sko\u0144czy\u0107 i wspomniany JEP pokazuje te\u017c bardziej z\u0142o\u017cone u\u017cycia, jak np. blokach JSON czy zapytaniach SQL. W przypadku tych ostatnich, idziemy w kierunku do\u015b\u0107 szalonych rozwi\u0105za\u0144, gdzie TemplatePolicy mog\u0142oby by\u0107 implementowane przez samo po\u0142\u0105czenie:<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"prismatic\/blocks","attrs":[],"innerBlocks":[],"innerHTML":"\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-\">var query = connection.\"SELECT * FROM \\{table}\";<\/code><\/pre>\n","innerContent":["\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-\">var query = connection.\"SELECT * FROM \\{table}\";<\/code><\/pre>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Aczkolwiek tutaj tw\u00f3rcy s\u0105 szczerzy, \u017ce nie jest to jeszcze wersja ostateczna. Zobaczymy w jakim kierunku b\u0119dzie si\u0119 to rozwija\u0142o. Je\u015bli chcieliby\u015bcie pozna\u0107 wi\u0119cej szczeg\u00f3\u0142\u00f3w: <a href=\"https:\/\/openjdk.java.net\/jeps\/8273943\">oryginalny JEP<\/a>.<\/p>\n","innerContent":["\n<p>Aczkolwiek tutaj tw\u00f3rcy s\u0105 szczerzy, \u017ce nie jest to jeszcze wersja ostateczna. Zobaczymy w jakim kierunku b\u0119dzie si\u0119 to rozwija\u0142o. Je\u015bli chcieliby\u015bcie pozna\u0107 wi\u0119cej szczeg\u00f3\u0142\u00f3w: <a href=\"https:\/\/openjdk.java.net\/jeps\/8273943\">oryginalny JEP<\/a>.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/yufse665ypa41.jpg\" alt=\"js be like: ProgrammerHumor\"\/><figcaption>Og\u00f3lnie je\u015bli chodzi o \u0142\u0105czenie string\u00f3w, <\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/yufse665ypa41.jpg\" alt=\"js be like: ProgrammerHumor\"\/><figcaption>Og\u00f3lnie je\u015bli chodzi o \u0142\u0105czenie string\u00f3w, <\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2>2.&nbsp;Dowiedz si\u0119 jak optymalizowa\u0107 czas Mavena? \ud83d\udc07<\/h2>\n","innerContent":["\n<h2>2.&nbsp;Dowiedz si\u0119 jak optymalizowa\u0107 czas Mavena? \ud83d\udc07<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/62887925.jpg\" alt=\"Didn't learn Maven World Moved on to Gradle! - Success Kid | Meme Generator\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/62887925.jpg\" alt=\"Didn't learn Maven World Moved on to Gradle! - Success Kid | Meme Generator\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Ostatnio sporo m\u00f3wi si\u0119 o Gradle, do tego stopnia, \u017ce Maven wydaje si\u0119 nie by\u0107 ju\u017c u\u017cywany.. Jest to oczywi\u015bcie zupe\u0142na nieprawda, w rzeczywisto\u015bci to w\u0142a\u015bnie Maven ci\u0105gle kr\u00f3luje we wszelkich statystykach, po prostu wypad\u0142 z \u0142ask bloger\u00f3w czy innego rodzaju technologicznych \u201cinfluencer\u00f3w\u201d. Dlatego te\u017c z pewn\u0105 rado\u015bci\u0105 przytuli\u0142em teksty od Nicolasa Fr\u00e4nkela, kt\u00f3ry to przygl\u0105da\u0142 si\u0119 tematowi przyspieszania Mavenowych build\u00f3w.<\/p>\n","innerContent":["\n<p>Ostatnio sporo m\u00f3wi si\u0119 o Gradle, do tego stopnia, \u017ce Maven wydaje si\u0119 nie by\u0107 ju\u017c u\u017cywany.. Jest to oczywi\u015bcie zupe\u0142na nieprawda, w rzeczywisto\u015bci to w\u0142a\u015bnie Maven ci\u0105gle kr\u00f3luje we wszelkich statystykach, po prostu wypad\u0142 z \u0142ask bloger\u00f3w czy innego rodzaju technologicznych \u201cinfluencer\u00f3w\u201d. Dlatego te\u017c z pewn\u0105 rado\u015bci\u0105 przytuli\u0142em teksty od Nicolasa Fr\u00e4nkela, kt\u00f3ry to przygl\u0105da\u0142 si\u0119 tematowi przyspieszania Mavenowych build\u00f3w.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Opracowania s\u0105 szczeg\u00f3lnie ciekawe nie tylko ze wzgl\u0119du na lekkie pi\u00f3ro Nicolasa (bardzo lubi\u0119 jego publikacje), ale r\u00f3wnie\u017c ze wzgl\u0119du na przyj\u0119ty przez niego zakres. <a href=\"https:\/\/blog.frankel.ch\/faster-maven-builds\/1\/\">Pierwszy z tekst\u00f3w<\/a> jest przegl\u0105dem poszczeg\u00f3lnych flag, kt\u00f3re w zaskakuj\u0105cy (zw\u0142aszcza dla ludzi, kt\u00f3rzy nigdy nie mieli okazji wgry\u017a\u0107 si\u0119 w Mavena) spos\u00f3b przyspieszaj\u0105 budowanie aplikacji. Mo\u017cna si\u0119 wi\u0119c przyjrze\u0107 sposobom paralelizacji test\u00f3w, maksymalizacji u\u017cycia rdzeni procesora czy efektywniejszym u\u017cyciu mavenowego deamona.<\/p>\n","innerContent":["\n<p>Opracowania s\u0105 szczeg\u00f3lnie ciekawe nie tylko ze wzgl\u0119du na lekkie pi\u00f3ro Nicolasa (bardzo lubi\u0119 jego publikacje), ale r\u00f3wnie\u017c ze wzgl\u0119du na przyj\u0119ty przez niego zakres. <a href=\"https:\/\/blog.frankel.ch\/faster-maven-builds\/1\/\">Pierwszy z tekst\u00f3w<\/a> jest przegl\u0105dem poszczeg\u00f3lnych flag, kt\u00f3re w zaskakuj\u0105cy (zw\u0142aszcza dla ludzi, kt\u00f3rzy nigdy nie mieli okazji wgry\u017a\u0107 si\u0119 w Mavena) spos\u00f3b przyspieszaj\u0105 budowanie aplikacji. Mo\u017cna si\u0119 wi\u0119c przyjrze\u0107 sposobom paralelizacji test\u00f3w, maksymalizacji u\u017cycia rdzeni procesora czy efektywniejszym u\u017cyciu mavenowego deamona.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>To jednak nie wszystko - szczeg\u00f3lnie ciekawa z mojej perspektywy <a href=\"https:\/\/blog.frankel.ch\/faster-maven-builds\/2\/\">jest druga cz\u0119\u015b\u0107<\/a>. Pokazuje ona bowiem, jak w efektywny spos\u00f3b u\u017cywa\u0107 Mavena w \u015brodowisku kontenerowym. Bior\u0105c pod uwag\u0119, jak cz\u0119sto do budowania aplikacji w \u015brodowisku CI\/CD u\u017cywamy np. takiego Dockera, znajomo\u015b\u0107 technik optymalizacyjnych czy sposob\u00f3w cache\u2019owania warstw itd mo\u017ce by\u0107 naprawd\u0119 cenn\u0105 informacj\u0105. Dlatego je\u015bli jeszcze nie przesiedli\u015bcie si\u0119 na Gradle - naprawd\u0119 polecam zerkn\u0105\u0107 do podlinkowanych artyku\u0142\u00f3w.<\/p>\n","innerContent":["\n<p>To jednak nie wszystko - szczeg\u00f3lnie ciekawa z mojej perspektywy <a href=\"https:\/\/blog.frankel.ch\/faster-maven-builds\/2\/\">jest druga cz\u0119\u015b\u0107<\/a>. Pokazuje ona bowiem, jak w efektywny spos\u00f3b u\u017cywa\u0107 Mavena w \u015brodowisku kontenerowym. Bior\u0105c pod uwag\u0119, jak cz\u0119sto do budowania aplikacji w \u015brodowisku CI\/CD u\u017cywamy np. takiego Dockera, znajomo\u015b\u0107 technik optymalizacyjnych czy sposob\u00f3w cache\u2019owania warstw itd mo\u017ce by\u0107 naprawd\u0119 cenn\u0105 informacj\u0105. Dlatego je\u015bli jeszcze nie przesiedli\u015bcie si\u0119 na Gradle - naprawd\u0119 polecam zerkn\u0105\u0107 do podlinkowanych artyku\u0142\u00f3w.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/r_1864904_UskfR.jpg\" alt=\"devRant - A fun community for developers to connect over code, tech &amp; life  as a programmer\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/r_1864904_UskfR.jpg\" alt=\"devRant - A fun community for developers to connect over code, tech &amp; life  as a programmer\"\/><\/figure>\n"]}],"_links":{"self":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/10066","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/users\/10"}],"replies":[{"embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/comments?post=10066"}],"version-history":[{"count":1,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/10066\/revisions"}],"predecessor-version":[{"id":10551,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/10066\/revisions\/10551"}],"wp:attachment":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/media?parent=10066"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/categories?post=10066"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/tags?post=10066"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}