{"id":3348,"date":"2022-12-01T11:08:38","date_gmt":"2022-12-01T11:08:38","guid":{"rendered":"http:\/\/the-codest.localhost\/blog\/handle-multiple-environments-for-multiple-projects-on-one-machine\/"},"modified":"2026-03-09T13:07:45","modified_gmt":"2026-03-09T13:07:45","slug":"vienu-kompiuteriu-tvarkyti-kelias-aplinkas-keliems-projektams","status":"publish","type":"post","link":"https:\/\/thecodest.co\/lt\/blog\/handle-multiple-environments-for-multiple-projects-on-one-machine\/","title":{"rendered":"Viename kompiuteryje tvarkyti kelias keli\u0173 projekt\u0173 aplinkas?"},"content":{"rendered":"<p>Pa\u017evelkime \u012f tipi\u0161k\u0105 darbo aplink\u0105 <a href=\"https:\/\/thecodest.co\/lt\/dictionary\/how-to-choose-software-house\/\">programin\u0117s \u012frangos namai<\/a>. Turite kelis klientus, kuri\u0173 aplinka skiriasi. Vieni renkasi \"MySQL\", kiti - \"Postgres\". Vienai j\u016bs\u0173 programos versijai reikia <a href=\"https:\/\/thecodest.co\/lt\/blog\/top-programming-languages-to-build-e-commerce\/\">Java<\/a> 11, o kitas Java 17. Frontend'ui reikia npm 12 arba 16, nes naudojate skirtingas versijas <a href=\"https:\/\/thecodest.co\/lt\/dictionary\/what-is-node-js-used-for-in-angular\/\">kampinis<\/a>. Galiausiai turite trimat\u012f masyv\u0105, kuriame yra vis\u0173 j\u016bs\u0173 DB, backend ir frontend versij\u0173 deriniai. Skamba blogai, bet vien\u0105 dien\u0105 j\u016bs\u0173 vir\u0161ininkas sako...<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"\/app\/uploads\/2024\/05\/comic.png\" alt=\"komiksai&lt;em&gt;su&lt;\/em&gt; bosu\" title=\"kai j\u016bs\u0173 vir\u0161ininkas sako...\"\/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Daugialyp\u0117s aplinkos \u0161aknys<\/h2>\n\n\n\n<p>Pirmiau apra\u0161yta situacija n\u0117ra ne\u012fprasta. Per\u0117jimas nuo vienos kalbos ar strukt\u016bros versijos prie kitos, duomen\u0173 bazi\u0173 atnaujinimas ar tiesiog skirtingi klient\u0173 reikalavimai gali apversti auk\u0161tyn kojomis visas konfig\u016bracijas. Tur\u0117tume tur\u0117ti sprendim\u0105, kuris pad\u0117t\u0173 <a href=\"https:\/\/thecodest.co\/lt\/blog\/why-us-companies-are-opting-for-polish-developers\/\">mus<\/a> valdyti \u0161iuos poky\u010dius, kuris atitikt\u0173 kelias prielaidas ir (arba) reikalavimus ir (arba) tikslus:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><b> lengva naudoti<\/b> - viena komanda pakeisti konfig\u016bracij\u0105 arba versij\u0105,<\/li>\n\n\n\n<li><b>turtinga biblioteka<\/b> - tur\u0117t\u0173 palaikyti \u012fvairias technologijas ir dalykus (bibliotekas, karkasus, programas),<\/li>\n\n\n\n<li><b> i\u0161ple\u010diamasis<\/b> - tur\u0117tum\u0117te pasi\u016blyti galimyb\u0119 prid\u0117ti savo \u012fskiepius.<\/li>\n<\/ul>\n\n\n\n<p>\u0160iame straipsnyje daugiausia d\u0117mesio skirsiu trims sritims. Pirmoji sritis - \"Java\" ir JVM \u012frankiai. Antroji - bendrosios paskirties \u012frankiai. Tre\u010dioji - kaip naudoti <a href=\"https:\/\/thecodest.co\/lt\/dictionary\/docker-developer\/\">\"docker\"<\/a> kad pasiektume savo tikslus.<\/p>\n\n\n\n<p>\u200b<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">A\u0161 esu Java ir dirbu JVM<\/h2>\n\n\n\n<p>Kai esate <strong><a href=\"https:\/\/thecodest.co\/lt\/dictionary\/java-developer\/\">\"Java\" programuotojas<\/a><\/strong> arba apskritai dirbate su <strong>JVM technologijos<\/strong>, tada galite naudoti <a href=\"https:\/\/sdkman.io\/\">SDKMAN!<\/a>. Tai labai gra\u017eus ir paprastas naudoti \u012frankis, palaikantis daugyb\u0119 bibliotek\u0173, strukt\u016br\u0173 ir kalb\u0173.<\/p>\n\n\n\n<p>Diegimo procesas <strong>SDKMAN!<\/strong> Tai gana paprasta. Reikia paleisti:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\"><code>curl -s \"https:\/\/get.sdkman.io\" | bash<\/code><\/code><\/pre>\n\n\n\n<p>ir tada<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\"><code><code>\u0161altinis \"$HOME\/.sdkman\/bin\/sdkman-init.sh\"<\/code><\/code><\/code><\/pre>\n\n\n\n<p>Dabar galite valdyti savo <strong>Java<\/strong>, <strong>Scala<\/strong> ir <strong>Maven<\/strong> versijos.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Versij\u0173 valdymas - pavyzdys<\/h3>\n\n\n\n<p>\u0160iame pavyzdyje \u012fdiegsime ir atnaujinsime keli\u0173 \u012franki\u0173 versijas. Tai tik nedidelis galim\u0173 \u012franki\u0173 poaibis.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u012erengimas<\/h3>\n\n\n\n<p>Tarkime, kad j\u016bs\u0173 naujoji <a href=\"https:\/\/thecodest.co\/lt\/dictionary\/why-do-projects-fail\/\">projektas<\/a> naudoja <strong>Java 17<\/strong>. J\u016bs neturite joki\u0173 <strong>Java<\/strong> \u012fdiegta versija. Norite j\u0105 \u012fdiegti ir papildomai prid\u0117ti \"Maven Daemon\" \u012frank\u012f, kad k\u016brimas b\u016bt\u0173 greitesnis. Taigi reikia \u012fdiegti ir \"Maven\". Nor\u0117dami tai padaryti, turite \u012fvykdyti tris paprastas komandas:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">$ sdk \u012fdiegti java 17-open\n\n$ sdk \u012fdiegti maven 3.8.4\n\n$ sdk \u012fdiegti mvnd 0.7.1<\/code><\/pre>\n\n\n\n<p>Kiekvieno \u012frankio diegimo pabaigoje j\u016bs\u0173 bus paklausta, ar norite, kad jis b\u016bt\u0173 numatytasis:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\"><code>Ar norite, kad \"Java 17-open\" b\u016bt\u0173 nustatyta kaip numatytoji? (Y\/n):<\/code><\/code><\/pre>\n\n\n\n<p>Tai svarbu diegiant nauj\u0105 bibliotekos ar kalbos versij\u0105, nes SDKMAN! nustatys \u0161i\u0105 numatyt\u0105j\u0105 versij\u0105 kaip visuotin\u0119 visiems dabartinio naudotojo terminalams.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Versij\u0173 tikrinimas ir atnaujinimas<\/h3>\n\n\n\n<p>Retkar\u010diais SDKMAN! turi atnaujinti indeksus. Per tai galite gauti prane\u0161im\u0105, kad yra keletas nauj\u0173 naudojam\u0173 \u012franki\u0173 versij\u0173. Galime patikrinti, kokios versijos yra, \u012fvesdami <code>sdk ls<\/code>. D\u0117l <code>sdk ls maven<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">Galimos \"Maven\" versijos\n\n================================================================================\n\n    3.8.6 3.3.3\n\n    3.8.5 3.3.1\n\n3.8.4 3.2.5\n\n    3.8.3 3.2.3\n\n    3.8.2 3.2.2\n\n    3.8.1 3.2.1\n\n    3.6.3 3.1.1\n\n    3.6.2 3.1.0\n\n    3.6.1 3.0.5\n\n    3.6.0 3.0.4\n\n    3.5.4\n\n    3.5.3\n\n    3.5.2\n\n    3.5.0\n\n    3.3.9\n\n\n\n================================================================================\n\nvietin\u0117 versija\n\n\u0161iuo metu naudojama\n\n================================================================================<\/code><\/pre>\n\n\n\n<p>Kaip matome pirmiau, \"Maven\" turi naujesn\u0119 versij\u0105 nei ta, kuri\u0105 naudojame. Tas pats pasakytina ir apie <code>mvnd<\/code> (0.8.2) ir \"Java\" (19-open). Atnaujinkime visk\u0105. Tam tereikia i\u0161kviesti diegimo komand\u0105, ta\u010diau \u0161\u012f kart\u0105 nenaudosime versijos \u017eymens:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">$ sdk \u012fdiegti maven\n\n$ sdk \u012fdiegti mvnd\n\n$ sdk \u012fdiegti java<\/code><\/pre>\n\n\n\n<p>Ta\u010diau \u012fvyko ka\u017ekas blogo. <code>Maven<\/code> ir <code>mvnd<\/code> turi teisingas versijas, bet <strong>Java<\/strong> turi versij\u0105 <code>17.0.5-tem<\/code>. Taip yra tod\u0117l, kad \"naujausi\u0105\" \u012frankio versij\u0105 kontroliuoja jo pardav\u0117jas, o ne vietinis SDKMAN! kas yra \u0161is pardav\u0117jas? Pardav\u0117jas SDKMAN! yra asmuo, kuris gali paskelbti versij\u0105. Ta\u010diau tarkime, kad pagaliau \u012fdieg\u0117me <code>19 atvir\u0173 dur\u0173<\/code>ir nustat\u0117me, kad jis yra numatytasis, ta\u010diau d\u0117l tam tikr\u0173 prie\u017eas\u010di\u0173 mums reikia naudoti <code>17 atviras<\/code>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Vietin\u0117s versijos ir kiekvieno terminalo versij\u0173 valdymas<\/h3>\n\n\n\n<p>\u200b<br>Galime sukonfig\u016bruoti <code>numatytasis<\/code> \u012frankio versij\u0105, kuri yra visuotin\u0117 visiems projektams ir terminalams. Ta\u010diau kai mums reikia konkre\u010dios versijos, turime du b\u016bdus, kaip tai padaryti. Pirmasis yra naudoti <code>sdk naudoti<\/code> komand\u0105 kiekvien\u0105 kart\u0105, kai norime naudoti konkre\u010di\u0105 \u012frankio versij\u0105 dabartiniame terminale. Antra, versij\u0173 s\u0105ra\u0161\u0105 reikia parengti <code>.sdkmanrc<\/code> fail\u0105, kuris saugomas kartu su projektu.<\/p>\n\n\n\n<p>Pirmoji parinktis skirta naudoti vien\u0105 kart\u0105, o antroji skirta dirbti su komandomis ir dalytis konfig\u016bracijomis tarp <a href=\"https:\/\/thecodest.co\/lt\/dictionary\/how-to-lead-software-development-team\/\">komanda<\/a> nariai.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">SDKMAN privalumai ir tr\u016bkumai!<\/h3>\n\n\n\n<p>\"SDKMAN!\" labai paprasta naudoti ir turi gausi\u0105 palaikom\u0173 \u012franki\u0173, strukt\u016br\u0173 ir kalb\u0173 bibliotek\u0105. Ji veikia \"Linux\", \"MacOS\" ir \"Windows\". Kita vertus, \u0161is \u012frankis orientuotas \u012f JVM ir reikalauja autoriaus sutikimo b\u016bti tiek\u0117ju. Be to, mechanikos <code>.sdkmanrc<\/code> yra labai prastas ir gali labai sul\u0117tinti katalog\u0173 keitimo proces\u0105.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Nor\u0117\u010diau naudoti daug kit\u0173 kalb\u0173<\/h2>\n\n\n\n<p>Jei reikia naudoti daug kalb\u0173 ir \u012franki\u0173, tur\u0117tum\u0117te per\u017ei\u016br\u0117ti <a href=\"https:\/\/asdf-vm.com\/\">asdf<\/a>. \u0160i priemon\u0117 skirta auk\u0161to lygio \u012frankiams. SDKMAN! rasite daug konkre\u010di\u0173 Java \u012franki\u0173, pavyzd\u017eiui, Bpipe arba Znai, o asdf si\u016blo daug daugiau \u012franki\u0173, ta\u010diau ne toki\u0173 specifini\u0173. \u017dinoma, kai kurie i\u0161 \u0161i\u0173 \u012franki\u0173 persidengia, pavyzd\u017eiui, Java, Tomcat arba mvnd galima rasti abiejose programose.<\/p>\n\n\n\n<p>Kai norite naudoti <code>asdf<\/code>, turite tur\u0117ti <code>git<\/code> ir <code>garbanoti<\/code> \u012frengtas. Po to tereikia:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\"><code>git clone https:\/\/github.com\/asdf-vm\/asdf.git ~\/.asdf --branch v0.10.2<\/code><\/code><\/pre>\n\n\n\n<p>ir prid\u0117kite \u0161ias eilutes <code>~\/.bashrc<\/code> file:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">. $HOME\/.asdf\/asdf.sh\n\n. $HOME\/.asdf\/completions\/asdf.bash<\/code><\/pre>\n\n\n\n<p>Dabar galite \u012fdiegti m\u0117gstam\u0173 versij\u0173 \u012fskiepius ir \u012frankius.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u012eskiepiais pagr\u012fstas valdymas<\/h3>\n\n\n\n<p>Skirtingai nei SDKMAN!, <code>asdf<\/code> \u012franki\u0173 valdymui naudoja \u012fskiepius. Taigi, prie\u0161 diegdami \u012frank\u012f, turite \u012fdiegti \u012fskiep\u012f. Gr\u012f\u017ekime prie m\u016bs\u0173 pavyzdinio projekto ir pabandykime sukonfig\u016bruoti aplink\u0105 naudodami <code>asadfsdf<\/code>.<\/p>\n\n\n\n<p>Pirmiausia turime \u012fdiegti \u012fskiepius:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">asdf \u012fskiepis prid\u0117ti java\n\nasdf \u012fskiepis add maven\n\nasdf \u012fskiepis prid\u0117ti mvnd<\/code><\/pre>\n\n\n\n<p>Tada galime \u012fdiegti \u012frankius:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">asdf \u012fdiegti java openjdk-17\n\nasdf \u012fdiegti maven 3.8.4\n\nasdf install mvnd 0.7.1<\/code><\/pre>\n\n\n\n<p>Ir dar kart\u0105, kitaip nei SDKMAN!, <code>asdf<\/code> nieko nekei\u010dia m\u016bs\u0173 aplinkoje. Kai bandome naudoti java, gauname tok\u012f klaidos prane\u0161im\u0105:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">Komandai \"Java\" nenustatyta jokia versija\n\nApsvarstykite galimyb\u0119 \u012f konfig\u016bracijos fail\u0105 ~\/.tool-versions \u012ftraukti vien\u0105 i\u0161 toliau nurodyt\u0173 versij\u0173\n\njava openjdk-17<\/code><\/pre>\n\n\n\n<p>Mums reikia sukurti fail\u0105 <code>.tool-versions<\/code> nam\u0173 kataloge, kad gal\u0117tum\u0117te valdyti numatyt\u0105sias versijas.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Vietin\u0117s ir pasaulin\u0117s versijos<\/h3>\n\n\n\n<p>Programin\u0117s \u012frangos versij\u0173 atnaujinimas naudojant <code>asdf<\/code> yra gana paprasta. Tiesiog \u012fdiegiame nauj\u0105 versij\u0105. Kadangi \u0161is procesas neturi \u012ftakos aplinkai, galime tai padaryti bet kuriuo metu ir bet kurioje fail\u0173 sistemos vietoje. Kai norime naudoti tam tikr\u0105 programin\u0117s \u012frangos versij\u0105, projekto kataloge turime sukurti <code>.tool-versions<\/code> fail\u0105, kuriuo gal\u0117t\u0173 dalytis komandos nariai. Nepamir\u0161kite, kad turite u\u017etikrinti, jog visi komandos nariai turi <code>asdf<\/code> ir \u012fskiepiai \u012fdiegti. \u012eskiepi\u0173 s\u0105ra\u0161\u0105 galite rasti <a href=\"https:\/\/github.com\/asdf-vm\/asdf-plugins\">\u010dia<\/a>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Versij\u0173 konfliktai<\/h3>\n\n\n\n<p><code>asdf<\/code> palaiko ne tik programavimo kalbas, karkasus ir \u012frankius, tokius kaip vim ar kubernetess. Ji palaiko ir duomen\u0173 bazes. Tokiu atveju gal\u0117tume \u012fdiegti kelias, pavyzd\u017eiui, \"Postgres\" versijas, bet veikt\u0173 tik viena j\u0173 instancija. Taip yra tod\u0117l, kad <code>asdf<\/code> vykdo komandas tiesiogiai operacin\u0117je sistemoje be jokio atskyrimo sluoksnio. D\u0117l to kyla toki\u0173 problem\u0173 kaip \"jau naudojamas prievadas\" ir konfliktai d\u0117l i\u0161tekli\u0173.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Privalumai ir tr\u016bkumai<\/h3>\n\n\n\n<p><code>asdf<\/code> yra labai geras \u012frankis, jei norite dirbti poliglot\u0173 aplinkoje. Ji palaiko daugyb\u0119 \u012franki\u0173, kalb\u0173 ir karkas\u0173. \u012eskiepiais pagr\u012fsta architekt\u016bra leid\u017eia labai lengvai tai i\u0161pl\u0117sti. Ta\u010diau su kai kuriais jo bibliotekoje esan\u010diais \u012frankiais reikia papildomai padirb\u0117ti diegiant, kad b\u016bt\u0173 pateiktos visos reikalingos priklausomyb\u0117s. <code>asdf<\/code> neveikia \"Windows\" sistemoje, net ir <a href=\"https:\/\/en.wikipedia.org\/wiki\/Windows_Subsystem_for_Linux\">WSL<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Paskutinis, bet ne ma\u017eiau svarbus dalykas - \"Docker<\/h2>\n\n\n\n<p>Kai pirmiau kalb\u0117jau apie uosto konflikt\u0105, daugelis i\u0161 j\u016bs\u0173 \u017eino sprendim\u0105.<\/p>\n\n\n\n<p><a href=\"https:\/\/www.docker.com\/\">\"Docker\"<\/a> kai kuriais atvejais gal\u0117t\u0173 mums pad\u0117ti. Pamin\u0117jau tai i\u0161 pareigos, nes \u0161is \u012frankis yra toks didelis ir sud\u0117tingas, kad negalime jo aptarti viename straipsnyje.<\/p>\n\n\n\n<p>Kartu su \"Docker\" tur\u0117tume naudoti <a href=\"https:\/\/docs.docker.com\/compose\/\">docker-compose<\/a> \u012frankis, suteikiantis galimyb\u0119 koordinuoti keli\u0173 konteineri\u0173 aplink\u0105.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\"Docker\" privalumai ir tr\u016bkumai<\/h3>\n\n\n\n<p>\"Docker\" padeda valdyti \u012frankius, kuriems reikalingi tam tikri konkret\u016bs i\u0161tekliai, pavyzd\u017eiui, prievadai arba failai. Jis atskiria egzempliorius \u012f konteinerius ir suteikia mums visi\u0161k\u0105 j\u0173 kontrol\u0119. Nepaisant to, \"Docker\" yra priemon\u0117, kuri \u012f m\u016bs\u0173 darbo aplink\u0105 \u012fne\u0161a daug sud\u0117tingumo ir kai kuriais atvejais gali kelti problem\u0173. Vienas i\u0161 toki\u0173 \"Docker\" naudojimo bandymuose atvej\u0173 apra\u0161ytas viename i\u0161 m\u016bs\u0173 ankstesni\u0173 <a href=\"https:\/\/thecodest.co\/blog\/test-containers-how-to-make-tests-easier\">straipsnis<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Apibendrinimas<\/h2>\n\n\n\n<p>\u017dinau, kad neapra\u0161iau vis\u0173 \u012franki\u0173, kuriuos galima naudoti \u012franki\u0173 versijoms valdyti. J\u0173 yra daug daugiau, pvz. <a href=\"https:\/\/www.jenv.be\/\">jEnv<\/a> kuri gal\u0117t\u0173 pakeisti SDKMAN,<\/p>\n\n\n\n<p>arba <a href=\"https:\/\/github.com\/nvm-sh\/nvm\">NVM<\/a> kur\u012f galime naudoti npm arba <a href=\"https:\/\/rvm.io\/\">RVM<\/a> svetain\u0117je <a href=\"https:\/\/thecodest.co\/lt\/case-studies\/providing-a-team-of-ruby-developers-for-a-fintech-company\/\">Ruby<\/a>. Daugiausia d\u0117mesio skyriau \u012frankiams, kuriuos \"i\u0161band\u017eiau m\u016b\u0161io lauke\" ir galiu rekomenduoti visiems.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/thecodest.co\/contact\/\"><img loading=\"lazy\" decoding=\"async\" width=\"1283\" height=\"460\" src=\"https:\/\/thecodest.co\/app\/uploads\/2024\/05\/interested_in_cooperation_.png\" alt=\"\" class=\"wp-image-4927\" srcset=\"https:\/\/thecodest.co\/app\/uploads\/2024\/05\/interested_in_cooperation_.png 1283w, https:\/\/thecodest.co\/app\/uploads\/2024\/05\/interested_in_cooperation_-300x108.png 300w, https:\/\/thecodest.co\/app\/uploads\/2024\/05\/interested_in_cooperation_-1024x367.png 1024w, https:\/\/thecodest.co\/app\/uploads\/2024\/05\/interested_in_cooperation_-768x275.png 768w, https:\/\/thecodest.co\/app\/uploads\/2024\/05\/interested_in_cooperation_-18x6.png 18w, https:\/\/thecodest.co\/app\/uploads\/2024\/05\/interested_in_cooperation_-67x24.png 67w\" sizes=\"auto, (max-width: 1283px) 100vw, 1283px\" \/><\/a><\/figure>","protected":false},"excerpt":{"rendered":"<p>Ar yra aukso viduriukas, leid\u017eiantis vienu kompiuteriu tvarkyti daugyb\u0119 aplink\u0173? M\u016bs\u0173 \"Java\" ekspertas Bart\u0142omiej \u017eino atsakym\u0105!<\/p>","protected":false},"author":2,"featured_media":3349,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[8],"tags":[],"class_list":["post-3348","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-software-development"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.3 (Yoast SEO v27.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Handle multiple environments for multiple projects on one machine? - The Codest<\/title>\n<meta name=\"description\" content=\"Discover how developers can handle multiple environments for different projects on a single machine using version managers and containerization.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/thecodest.co\/lt\/tinklarastis\/vienu-kompiuteriu-tvarkyti-kelias-aplinkas-keliems-projektams\/\" \/>\n<meta property=\"og:locale\" content=\"lt_LT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Handle multiple environments for multiple projects on one machine?\" \/>\n<meta property=\"og:description\" content=\"Discover how developers can handle multiple environments for different projects on a single machine using version managers and containerization.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/thecodest.co\/lt\/tinklarastis\/vienu-kompiuteriu-tvarkyti-kelias-aplinkas-keliems-projektams\/\" \/>\n<meta property=\"og:site_name\" content=\"The Codest\" \/>\n<meta property=\"article:published_time\" content=\"2022-12-01T11:08:38+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-03-09T13:07:45+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/thecodest.co\/app\/uploads\/2024\/05\/how_to_handle_multiple_environments_for_numerous_projects_on_just_one_machine_.png\" \/>\n\t<meta property=\"og:image:width\" content=\"960\" \/>\n\t<meta property=\"og:image:height\" content=\"540\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"thecodest\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"thecodest\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/handle-multiple-environments-for-multiple-projects-on-one-machine\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/handle-multiple-environments-for-multiple-projects-on-one-machine\\\/\"},\"author\":{\"name\":\"thecodest\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/#\\\/schema\\\/person\\\/7e3fe41dfa4f4e41a7baad4c6e0d4f76\"},\"headline\":\"Handle multiple environments for multiple projects on one machine?\",\"datePublished\":\"2022-12-01T11:08:38+00:00\",\"dateModified\":\"2026-03-09T13:07:45+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/handle-multiple-environments-for-multiple-projects-on-one-machine\\\/\"},\"wordCount\":1315,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/handle-multiple-environments-for-multiple-projects-on-one-machine\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/thecodest.co\\\/app\\\/uploads\\\/2024\\\/05\\\/how_to_handle_multiple_environments_for_numerous_projects_on_just_one_machine_.png\",\"articleSection\":[\"Software Development\"],\"inLanguage\":\"lt-LT\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/thecodest.co\\\/blog\\\/handle-multiple-environments-for-multiple-projects-on-one-machine\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/handle-multiple-environments-for-multiple-projects-on-one-machine\\\/\",\"url\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/handle-multiple-environments-for-multiple-projects-on-one-machine\\\/\",\"name\":\"Handle multiple environments for multiple projects on one machine? - The Codest\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/handle-multiple-environments-for-multiple-projects-on-one-machine\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/handle-multiple-environments-for-multiple-projects-on-one-machine\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/thecodest.co\\\/app\\\/uploads\\\/2024\\\/05\\\/how_to_handle_multiple_environments_for_numerous_projects_on_just_one_machine_.png\",\"datePublished\":\"2022-12-01T11:08:38+00:00\",\"dateModified\":\"2026-03-09T13:07:45+00:00\",\"description\":\"Discover how developers can handle multiple environments for different projects on a single machine using version managers and containerization.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/handle-multiple-environments-for-multiple-projects-on-one-machine\\\/#breadcrumb\"},\"inLanguage\":\"lt-LT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/thecodest.co\\\/blog\\\/handle-multiple-environments-for-multiple-projects-on-one-machine\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"lt-LT\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/handle-multiple-environments-for-multiple-projects-on-one-machine\\\/#primaryimage\",\"url\":\"https:\\\/\\\/thecodest.co\\\/app\\\/uploads\\\/2024\\\/05\\\/how_to_handle_multiple_environments_for_numerous_projects_on_just_one_machine_.png\",\"contentUrl\":\"https:\\\/\\\/thecodest.co\\\/app\\\/uploads\\\/2024\\\/05\\\/how_to_handle_multiple_environments_for_numerous_projects_on_just_one_machine_.png\",\"width\":960,\"height\":540},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/handle-multiple-environments-for-multiple-projects-on-one-machine\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/thecodest.co\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Handle multiple environments for multiple projects on one machine?\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/#website\",\"url\":\"https:\\\/\\\/thecodest.co\\\/\",\"name\":\"The Codest\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/thecodest.co\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"lt-LT\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/#organization\",\"name\":\"The Codest\",\"url\":\"https:\\\/\\\/thecodest.co\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"lt-LT\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/thecodest.co\\\/app\\\/uploads\\\/2024\\\/03\\\/thecodest-logo.svg\",\"contentUrl\":\"https:\\\/\\\/thecodest.co\\\/app\\\/uploads\\\/2024\\\/03\\\/thecodest-logo.svg\",\"width\":144,\"height\":36,\"caption\":\"The Codest\"},\"image\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/pl.linkedin.com\\\/company\\\/codest\",\"https:\\\/\\\/clutch.co\\\/profile\\\/codest\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/#\\\/schema\\\/person\\\/7e3fe41dfa4f4e41a7baad4c6e0d4f76\",\"name\":\"thecodest\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"lt-LT\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/5dbfe6a1e8c86e432e8812759e34e6fe82ebac75119ae3237a6c1311fa19caf4?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/5dbfe6a1e8c86e432e8812759e34e6fe82ebac75119ae3237a6c1311fa19caf4?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/5dbfe6a1e8c86e432e8812759e34e6fe82ebac75119ae3237a6c1311fa19caf4?s=96&d=mm&r=g\",\"caption\":\"thecodest\"},\"url\":\"https:\\\/\\\/thecodest.co\\\/lt\\\/author\\\/thecodest\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Viename kompiuteryje tvarkyti kelias keli\u0173 projekt\u0173 aplinkas? - The Codest","description":"Su\u017einokite, kaip naudodami versij\u0173 tvarkykles ir konteinerizavim\u0105 k\u016br\u0117jai gali valdyti kelias skirting\u0173 projekt\u0173 aplinkas viename kompiuteryje.","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:\/\/thecodest.co\/lt\/tinklarastis\/vienu-kompiuteriu-tvarkyti-kelias-aplinkas-keliems-projektams\/","og_locale":"lt_LT","og_type":"article","og_title":"Handle multiple environments for multiple projects on one machine?","og_description":"Discover how developers can handle multiple environments for different projects on a single machine using version managers and containerization.","og_url":"https:\/\/thecodest.co\/lt\/tinklarastis\/vienu-kompiuteriu-tvarkyti-kelias-aplinkas-keliems-projektams\/","og_site_name":"The Codest","article_published_time":"2022-12-01T11:08:38+00:00","article_modified_time":"2026-03-09T13:07:45+00:00","og_image":[{"width":960,"height":540,"url":"https:\/\/thecodest.co\/app\/uploads\/2024\/05\/how_to_handle_multiple_environments_for_numerous_projects_on_just_one_machine_.png","type":"image\/png"}],"author":"thecodest","twitter_card":"summary_large_image","twitter_misc":{"Written by":"thecodest","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/thecodest.co\/blog\/handle-multiple-environments-for-multiple-projects-on-one-machine\/#article","isPartOf":{"@id":"https:\/\/thecodest.co\/blog\/handle-multiple-environments-for-multiple-projects-on-one-machine\/"},"author":{"name":"thecodest","@id":"https:\/\/thecodest.co\/#\/schema\/person\/7e3fe41dfa4f4e41a7baad4c6e0d4f76"},"headline":"Handle multiple environments for multiple projects on one machine?","datePublished":"2022-12-01T11:08:38+00:00","dateModified":"2026-03-09T13:07:45+00:00","mainEntityOfPage":{"@id":"https:\/\/thecodest.co\/blog\/handle-multiple-environments-for-multiple-projects-on-one-machine\/"},"wordCount":1315,"commentCount":0,"publisher":{"@id":"https:\/\/thecodest.co\/#organization"},"image":{"@id":"https:\/\/thecodest.co\/blog\/handle-multiple-environments-for-multiple-projects-on-one-machine\/#primaryimage"},"thumbnailUrl":"https:\/\/thecodest.co\/app\/uploads\/2024\/05\/how_to_handle_multiple_environments_for_numerous_projects_on_just_one_machine_.png","articleSection":["Software Development"],"inLanguage":"lt-LT","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/thecodest.co\/blog\/handle-multiple-environments-for-multiple-projects-on-one-machine\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/thecodest.co\/blog\/handle-multiple-environments-for-multiple-projects-on-one-machine\/","url":"https:\/\/thecodest.co\/blog\/handle-multiple-environments-for-multiple-projects-on-one-machine\/","name":"Viename kompiuteryje tvarkyti kelias keli\u0173 projekt\u0173 aplinkas? - The Codest","isPartOf":{"@id":"https:\/\/thecodest.co\/#website"},"primaryImageOfPage":{"@id":"https:\/\/thecodest.co\/blog\/handle-multiple-environments-for-multiple-projects-on-one-machine\/#primaryimage"},"image":{"@id":"https:\/\/thecodest.co\/blog\/handle-multiple-environments-for-multiple-projects-on-one-machine\/#primaryimage"},"thumbnailUrl":"https:\/\/thecodest.co\/app\/uploads\/2024\/05\/how_to_handle_multiple_environments_for_numerous_projects_on_just_one_machine_.png","datePublished":"2022-12-01T11:08:38+00:00","dateModified":"2026-03-09T13:07:45+00:00","description":"Su\u017einokite, kaip naudodami versij\u0173 tvarkykles ir konteinerizavim\u0105 k\u016br\u0117jai gali valdyti kelias skirting\u0173 projekt\u0173 aplinkas viename kompiuteryje.","breadcrumb":{"@id":"https:\/\/thecodest.co\/blog\/handle-multiple-environments-for-multiple-projects-on-one-machine\/#breadcrumb"},"inLanguage":"lt-LT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/thecodest.co\/blog\/handle-multiple-environments-for-multiple-projects-on-one-machine\/"]}]},{"@type":"ImageObject","inLanguage":"lt-LT","@id":"https:\/\/thecodest.co\/blog\/handle-multiple-environments-for-multiple-projects-on-one-machine\/#primaryimage","url":"https:\/\/thecodest.co\/app\/uploads\/2024\/05\/how_to_handle_multiple_environments_for_numerous_projects_on_just_one_machine_.png","contentUrl":"https:\/\/thecodest.co\/app\/uploads\/2024\/05\/how_to_handle_multiple_environments_for_numerous_projects_on_just_one_machine_.png","width":960,"height":540},{"@type":"BreadcrumbList","@id":"https:\/\/thecodest.co\/blog\/handle-multiple-environments-for-multiple-projects-on-one-machine\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/thecodest.co\/"},{"@type":"ListItem","position":2,"name":"Handle multiple environments for multiple projects on one machine?"}]},{"@type":"WebSite","@id":"https:\/\/thecodest.co\/#website","url":"https:\/\/thecodest.co\/","name":"The Codest","description":"","publisher":{"@id":"https:\/\/thecodest.co\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/thecodest.co\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"lt-LT"},{"@type":"Organization","@id":"https:\/\/thecodest.co\/#organization","name":"The Codest","url":"https:\/\/thecodest.co\/","logo":{"@type":"ImageObject","inLanguage":"lt-LT","@id":"https:\/\/thecodest.co\/#\/schema\/logo\/image\/","url":"https:\/\/thecodest.co\/app\/uploads\/2024\/03\/thecodest-logo.svg","contentUrl":"https:\/\/thecodest.co\/app\/uploads\/2024\/03\/thecodest-logo.svg","width":144,"height":36,"caption":"The Codest"},"image":{"@id":"https:\/\/thecodest.co\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/pl.linkedin.com\/company\/codest","https:\/\/clutch.co\/profile\/codest"]},{"@type":"Person","@id":"https:\/\/thecodest.co\/#\/schema\/person\/7e3fe41dfa4f4e41a7baad4c6e0d4f76","name":"thecodest","image":{"@type":"ImageObject","inLanguage":"lt-LT","@id":"https:\/\/secure.gravatar.com\/avatar\/5dbfe6a1e8c86e432e8812759e34e6fe82ebac75119ae3237a6c1311fa19caf4?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/5dbfe6a1e8c86e432e8812759e34e6fe82ebac75119ae3237a6c1311fa19caf4?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/5dbfe6a1e8c86e432e8812759e34e6fe82ebac75119ae3237a6c1311fa19caf4?s=96&d=mm&r=g","caption":"thecodest"},"url":"https:\/\/thecodest.co\/lt\/author\/thecodest\/"}]}},"_links":{"self":[{"href":"https:\/\/thecodest.co\/lt\/wp-json\/wp\/v2\/posts\/3348","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/thecodest.co\/lt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/thecodest.co\/lt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/thecodest.co\/lt\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/thecodest.co\/lt\/wp-json\/wp\/v2\/comments?post=3348"}],"version-history":[{"count":9,"href":"https:\/\/thecodest.co\/lt\/wp-json\/wp\/v2\/posts\/3348\/revisions"}],"predecessor-version":[{"id":8550,"href":"https:\/\/thecodest.co\/lt\/wp-json\/wp\/v2\/posts\/3348\/revisions\/8550"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/thecodest.co\/lt\/wp-json\/wp\/v2\/media\/3349"}],"wp:attachment":[{"href":"https:\/\/thecodest.co\/lt\/wp-json\/wp\/v2\/media?parent=3348"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/thecodest.co\/lt\/wp-json\/wp\/v2\/categories?post=3348"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/thecodest.co\/lt\/wp-json\/wp\/v2\/tags?post=3348"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}