window.pipedriveLeadboosterConfig = { base: pipedrive.com', companyId: 11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', version: 2, } ;(function () { var w = window if (w.LeadBooster) { console.warn('LeadBooster on jo olemassa') } else { w.LeadBooster = { q: [], on: function (n, h) { this.q.push({ t: 'o', n: n, h: h }) }, trigger: function (n) { this.q.push({ t: 't', n: n }) }, } } })() Käsitteletkö useita ympäristöjä useita projekteja varten yhdellä koneella? - The Codest
Codest
  • Tietoa meistä
  • Palvelut
    • Ohjelmistokehitys
      • Frontend-kehitys
      • Backend-kehitys
    • Staff Augmentation
      • Frontend-kehittäjät
      • Backend-kehittäjät
      • Tietoinsinöörit
      • Pilvi-insinöörit
      • QA insinöörit
      • Muut
    • Se neuvoa-antava
      • Tilintarkastus & konsultointi
  • Toimialat
    • Fintech & pankkitoiminta
    • E-commerce
    • Adtech
    • Terveysteknologia
    • Valmistus
    • Logistiikka
    • Autoteollisuus
    • IOT
  • Arvo
    • TOIMITUSJOHTAJA
    • CTO
    • Toimituspäällikkö
  • Tiimimme
  • Tapaustutkimukset
  • Tiedä miten
    • Blogi
    • Tapaamiset
    • Webinaarit
    • Resurssit
Työurat Ota yhteyttä
  • Tietoa meistä
  • Palvelut
    • Ohjelmistokehitys
      • Frontend-kehitys
      • Backend-kehitys
    • Staff Augmentation
      • Frontend-kehittäjät
      • Backend-kehittäjät
      • Tietoinsinöörit
      • Pilvi-insinöörit
      • QA insinöörit
      • Muut
    • Se neuvoa-antava
      • Tilintarkastus & konsultointi
  • Arvo
    • TOIMITUSJOHTAJA
    • CTO
    • Toimituspäällikkö
  • Tiimimme
  • Tapaustutkimukset
  • Tiedä miten
    • Blogi
    • Tapaamiset
    • Webinaarit
    • Resurssit
Työurat Ota yhteyttä
Takaisin nuoli PALAA TAAKSE
2022-12-01
Ohjelmistokehitys

Käsitteletkö useita ympäristöjä useita projekteja varten yhdellä koneella?

Bartłomiej Kuczyński

Onko olemassa kultainen keskitie, jolla voidaan käsitellä monia ympäristöjä suuren määrän osalta yhdellä koneella? Java-asiantuntijamme Bartłomiej tietää vastauksen!

Tarkastellaanpa tyypillistä työympäristöä seuraavassa yrityksessä ohjelmistotalo. Sinulla on muutama asiakas, joilla on erilaiset ympäristöt. Jotkut suosivat MySQL:ää, toiset Postgresiä. Yksi sovelluksesi versio tarvitsee Java 11 ja toinen Java 17. Frontend tarvitsee npm 12:n tai 16:n, koska käytät eri versioita ohjelmistosta kulmikas. Lopuksi sinulla on kolmiulotteinen array, joka sisältää kaikkien tietokantojesi, backend- ja frontend-versioiden yhdistelmät. Kuulostaa pahalta, mutta eräänä päivänä pomosi sanoo...

sarjakuvia<em>pomon kanssa</em>kanssa

Moniavaruusympäristön juuret

Edellä kuvattu tilanne ei ole mitenkään harvinainen. Siirtyminen kieli- tai kehysversioiden välillä, tietokantojen päivitykset tai yksinkertaisesti asiakkailta tulevat erilaiset vaatimukset voivat kääntää kaikki kokoonpanot ylösalaisin. Meillä pitäisi olla ratkaisu, joka auttaa meitä hallitsemaan näitä muutoksia ja joka vastaa muutamia oletuksia ja/tai vaatimuksia ja/tai tavoitteita:

  • helppokäyttöinen - yksi komento kokoonpanon tai version muuttamiseksi,
  • rikas kirjasto - pitäisi tukea useita teknologioita ja "asioita" (kirjastoja, kehyksiä, sovelluksia),
  • laajennettavissa - sinun pitäisi tarjota mahdollisuus lisätä liitännäisiäsi.

Tässä artikkelissa keskityn kolmeen alueeseen. Ensimmäinen on Javan ja JVM:n työkalut. Toinen on yleiskäyttöiset työkalut. Kolmas on se, miten voimme käyttää telakkaa tavoitteidemme saavuttamiseksi.

​

Olen Java ja työskentelen JVM:n parissa.

Kun olet Java-kehittäjä tai, yleisemmin, työskentelet JVM-tekniikat, niin voit käyttää SDKMAN!. Tämä on erittäin mukava ja helppokäyttöinen työkalu, joka tukee monia kirjastoja, kehyksiä ja kieliä.

Asennusprosessi SDKMAN! Se on melko yksinkertaista. Sinun täytyy ajaa:

curl -s "https://get.sdkman.io" | bash

ja sitten

lähde "$HOME/.sdkman/bin/sdkman-init.sh"

Nyt voit hallita Java, Scala ja Maven versiot.

Versioiden hallinta - esimerkki

Tässä esimerkissä asennamme ja päivitämme muutaman työkalun version. Tämä on vain pieni osa käytettävissä olevista työkaluista.

Asennus

Oletetaan, että uusi projekti käyttää Java 17. Sinulla ei ole mitään Java asennettu versio. Haluat asentaa sen ja lisäksi lisätä Maven Daemon -työkalun, jotta rakentaminen nopeutuisi. Sinun on siis asennettava myös Maven. Sitä varten sinun on suoritettava kolme yksinkertaista komentoa:

$ sdk install java 17-open

$ sdk asenna maven 3.8.4

$ sdk asentaa mvnd 0.7.1.

Kunkin työkalun asennuksen lopussa sinulta kysytään, haluatko tehdä siitä oletusarvon:

Tahdotko, että Java 17-open asetetaan oletusarvoksi? (Y/n):

Tämä on tärkeää, kun asennat uuden version kirjastosta tai kielestä, koska SDKMAN! asettaa tämän oletusversion globaaliksi kaikille nykyisen käyttäjän päätelaitteille.

Versioiden tarkistaminen ja päivittäminen

SDKMAN! joutuu aika ajoin päivittämään indeksit. Tällöin saatat saada viestin, että käyttämiesi työkalujen versiot ovat muuttuneet. Voimme tarkistaa, mitkä versiot ovat saatavilla kirjoittamalla seuraavalla tavalla sdk ls. Osoitteessa sdk ls maven:

Saatavilla olevat Maven-versiot

================================================================================

    3.8.6 3.3.3

    3.8.5 3.3.1

3.8.4 3.2.5

    3.8.3 3.2.3

    3.8.2 3.2.2

    3.8.1 3.2.1

    3.6.3 3.1.1

    3.6.2 3.1.0

    3.6.1 3.0.5

    3.6.0 3.0.4

    3.5.4

    3.5.3

    3.5.2

    3.5.0

    3.3.9



================================================================================

paikallinen versio

tällä hetkellä käytössä

================================================================================

Kuten yllä näkyy, Mavenilla on uudempi versio kuin käyttämämme versio. Sama koskee myös mvnd (0.8.2) ja Java (19-open). Päivitetään kaikki. Sitä varten meidän tarvitsee vain kutsua install-komentoa, mutta tällä kertaa emme käytä version määrittelyä:

$ sdk asentaa mavenin

$ sdk install mvnd

$ sdk asenna java

Mutta jotain väärää tapahtui. Maven ja mvnd on oikeat versiot, mutta Java on versio 17.0.5-tem. Tämä johtuu siitä, että työkalun "uusinta" versiota valvoo sen myyjä, ei paikallinen SDKMAN.Kuka tämä myyjä on? SDKMAN!:ssa myyjä on joku, joka voi julkaista version. Sanotaan kuitenkin, että asennamme lopulta version. 19-avoin, ja teimme siitä oletusarvon, mutta jostain syystä meidän on käytettävä 17-avoin.

Paikalliset versiot ja terminaalikohtainen versionhallinta

​
Voimme määrittää oletus versio työkalusta, joka on maailmanlaajuinen kaikille projekteille ja päätelaitteille. Mutta kun tarvitsemme tietyn version, meillä on kaksi tapaa tehdä se. Ensimmäinen on käyttää sdk käyttää komennon joka kerta, kun haluamme käyttää työkalun tiettyä versiota nykyisessä päätelaitteessa. Toinen on laatia versioluettelo .sdkmanrc tiedosto, joka on tallennettu projektin mukana.

Ensimmäinen vaihtoehto on tarkoitettu yksittäiskäyttöön, mutta toinen on suunniteltu tiimityöskentelyyn ja kokoonpanojen jakamiseen seuraavien kesken. joukkue jäsenet.

SDKMANin hyvät ja huonot puolet!

SDKMAN! on erittäin helppokäyttöinen, ja siinä on laaja kirjasto tuettuja työkaluja, kehyksiä ja kieliä. Se toimii Linuxissa, MacOS:ssä ja Windowsissa. Toisaalta tämä työkalu on JVM-keskeinen ja vaatii tekijän hyväksynnän myyjäksi. Lisäksi mekaniikan .sdkmanrc on erittäin huono ja voi hidastaa hakemistojen vaihtamista merkittävästi.

Haluaisin käyttää monia muita kieliä

Jos sinun on käytettävä useita kieliä ja työkaluja, sinun kannattaa tutustua seuraaviin tuotteisiin asdf. Tämä työkalu keskittyy "korkean tason" työkaluihin. SDKMAN! -ohjelmasta löydät monia Java-kohtaisia työkaluja, kuten Bpipe tai Znai, mutta asdf tarjoaa paljon enemmän työkaluja, jotka eivät ole niin erityisiä. Tietenkin jotkut näistä työkaluista ovat päällekkäisiä, esimerkiksi Java, Tomcat tai mvnd ovat saatavilla molemmissa.

Kun haluat käyttää asdf, sinulla on oltava git ja curl asennettu. Sen jälkeen voit vain:

git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.10.2

ja lisää nämä rivit ~/.bashrc file:

. $HOME/.asdf/asdf.sh

. $HOME/.asdf/completions/asdf.bash

Nyt voit asentaa liitännäisiä ja työkaluja suosikkiversioissasi.

Plugin-pohjainen hallinta

Toisin kuin SDKMAN!, asdf käyttää liitännäisiä työkalujen hallintaan. Ennen kuin voit asentaa työkalun, sinun on siis asennettava lisäosa. Palataanpa takaisin esimerkkiprojektiimme ja yritetään konfiguroida ympäristö käyttäen seuraavia ohjeita asadfsdf.

Ensin meidän on asennettava lisäosat:

asdf-lisäosan lisääminen java

asdf-lisäosa lisää maven

asdf plugin add mvnd

Sitten voimme asentaa työkalut:

asdf install java openjdk-17

asdf asentaa maven 3.8.4:n

asdf install mvnd 0.7.1

Ja jälleen kerran, toisin kuin SDKMAN!, asdf ei muuta mitään ympäristössämme. Kun yritämme käyttää javaa, saamme seuraavan virheilmoituksen:

Komennolle Java ei ole asetettu versiota

Harkitse jonkin seuraavan version lisäämistä konfigurointitiedostoon osoitteessa ~/.tool-versions

java openjdk-17

Meidän on luotava tiedosto .tool-versiot kotihakemistossa oletusversioiden hallintaa varten.

Paikalliset ja maailmanlaajuiset versiot

Ohjelmistoversioiden päivittäminen asdf on melko yksinkertainen. Asennamme vain uuden version. Koska tämä prosessi ei vaikuta ympäristöön, voimme tehdä sen milloin tahansa ja mihin tahansa kohtaan tiedostojärjestelmässä. Kun haluamme käyttää jonkin ohjelmiston tiettyä versiota, meidän on luotava projektin hakemistoon tiedosto nimeltä .tool-versiot tiedosto, jonka tiimin jäsenet voivat jakaa keskenään. Muista, että sinun on taattava, että kaikilla tiimin jäsenillä on seuraavat tiedot asdf ja lisäosat asennettuna. Luettelo lisäosista löytyy täällä.

Versiokonfliktit

asdf tukee paitsi ohjelmointikieliä, kehyksiä ja työkaluja, kuten vimiä tai kubernetessiä. Se tukee myös tietokantoja. Tällöin voisimme asentaa useita versioita esimerkiksi Postgresista, mutta vain yksi instanssi voisi toimia. Tämä johtuu siitä, että asdf suorittaa komentoja suoraan käyttöjärjestelmässäsi ilman mitään erottavaa kerrosta. Tämä johtaa ongelmiin, kuten "portti on jo käytössä" ja resurssikonflikteihin.

Hyödyt ja haitat

asdf on erittäin hyvä työkalu, jos haluat työskennellä monikielisessä ympäristössä. Se tukee monia työkaluja, kieliä ja kehyksiä. Plugin-pohjainen arkkitehtuuri tekee sen laajentamisesta erittäin helppoa. Jotkin sen kirjastossa olevista työkaluista vaativat kuitenkin lisätyötä asennuksen aikana, jotta kaikki tarvittavat riippuvuudet saadaan käyttöön. asdf ei toimi Windowsissa, edes WSL.

Viimeisenä mutta ei vähäisimpänä - Docker

Kun puhuin edellä satamakonfliktista, monet teistä tietävät ratkaisun.

Docker voisi auttaa meitä joissakin tapauksissa. Mainitsen sen velvollisuudestani, koska tämä työkalu on niin suuri ja monimutkainen, ettemme voi käsitellä sitä yhdessä artikkelissa.

Yhdessä Dockerin kanssa meidän pitäisi käyttää docker-compose työkalu, joka antaa meille mahdollisuuden koordinoida monen kontin ympäristöjä.

Dockerin hyvät ja huonot puolet

Docker auttaa meitä hallitsemaan työkaluja, jotka tarvitsevat tiettyjä resursseja, kuten portteja tai tiedostoja. Se erottelee instanssit kontteihin ja antaa meille täyden hallinnan niihin. Docker on kuitenkin työkalu, joka tuo paljon monimutkaisuutta työympäristöömme ja voi joissakin tapauksissa olla ongelmallinen. Yksi näistä tapauksista, joissa Dockeria käytetään testeissä, on kuvattu yhdessä aiemmista tapauksistamme artikkeli.

Yhteenveto

Tiedän, etten kuvannut kaikkia työkaluja, joita voidaan käyttää työkaluversioiden hallintaan. Niitä on paljon muitakin, kuten jEnv joka voisi korvata SDKMANin,

tai NVM jota voimme käyttää npm:n tai RVM Rubyn puolesta. Keskityin työkaluihin, joita olen "testannut taistelukentällä" ja joita voin suositella kenelle tahansa.

Aiheeseen liittyvät artikkelit

Ohjelmistokehitys

9 virhettä, joita kannattaa välttää Java-ohjelmoinnissa

Mitä virheitä tulisi välttää Java-ohjelmoinnissa? Seuraavassa kappaleessa vastaamme tähän kysymykseen.

Codest
Rafal Sawicki Java-kehittäjä
Yritys- ja skaalausratkaisut

Miten Java voi tukea yritystäsi?

Ennen kuin aloitamme, haluaisin muistuttaa teitä yhdestä tärkeästä asiasta. Java ei ole vain ohjelmointikieli.

Bartlomiej Kuczynski
Ohjelmistokehitys

Testikontit - miten tehdä testeistä helpompia?

Etsitkö tapaa tehdä testejä helpommin? Me saimme sinut! Tutustu seuraavaan artikkeliin ja opi, miten se on mahdollista.

Bartlomiej Kuczynski
Ohjelmistokehitys

Javascript-työkalut toiminnassa

Tutustu joihinkin JavaScript-työkaluihin, joilla voit parantaa ohjelmointipeliäsi. Lue lisää ESLintistä, Prettieristä ja Huskysta!

Codest
Reda Salmi React Kehittäjä
Ohjelmistokehitys

Asynkroninen ja yksisäikeinen JavaScript?

JavaScript on yksisäikeinen kieli, joka on samalla myös lukkiutumaton, asynkroninen ja samanaikainen. Tässä artikkelissa selitetään sinulle, miten se tapahtuu.

Lukasz Kolko

Tilaa tietopankkimme ja pysy ajan tasalla IT-alan asiantuntemuksesta.

    Tietoa meistä

    The Codest - Kansainvälinen ohjelmistokehitysyritys, jolla on teknologiakeskuksia Puolassa.

    Yhdistynyt kuningaskunta - pääkonttori

    • Toimisto 303B, 182-184 High Street North E6 2JA
      Lontoo, Englanti

    Puola - Paikalliset teknologiakeskukset

    • Fabryczna Office Park, Aleja
      Pokoju 18, 31-564 Krakova
    • Brain Embassy, Konstruktorska
      11, 02-673 Varsova, Puola

      Codest

    • Etusivu
    • Tietoa meistä
    • Palvelut
    • Tapaustutkimukset
    • Tiedä miten
    • Työurat
    • Sanakirja

      Palvelut

    • Se neuvoa-antava
    • Ohjelmistokehitys
    • Backend-kehitys
    • Frontend-kehitys
    • Staff Augmentation
    • Backend-kehittäjät
    • Pilvi-insinöörit
    • Tietoinsinöörit
    • Muut
    • QA insinöörit

      Resurssit

    • Faktoja ja myyttejä yhteistyöstä ulkoisen ohjelmistokehityskumppanin kanssa
    • Yhdysvalloista Eurooppaan: Miksi amerikkalaiset startup-yritykset päättävät muuttaa Eurooppaan?
    • Tech Offshore -kehityskeskusten vertailu: Tech Offshore Eurooppa (Puola), ASEAN (Filippiinit), Euraasia (Turkki).
    • Mitkä ovat teknologiajohtajien ja tietohallintojohtajien tärkeimmät haasteet?
    • Codest
    • Codest
    • Codest
    • Privacy policy
    • Verkkosivuston käyttöehdot

    Tekijänoikeus © 2025 by The Codest. Kaikki oikeudet pidätetään.

    fiFinnish
    en_USEnglish de_DEGerman sv_SESwedish da_DKDanish nb_NONorwegian fr_FRFrench pl_PLPolish arArabic it_ITItalian jaJapanese ko_KRKorean es_ESSpanish nl_NLDutch etEstonian elGreek fiFinnish