window.pipedriveLeadboosterConfig = { base: 'leadbooster-chat.pipedrive.com', companyId: 11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', version: 2, } ;(function () { var w = Fenster if (w.LeadBooster) { console.warn('LeadBooster existiert bereits') } 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 }) }, } } })() Mehrere Umgebungen für mehrere Projekte auf einem Rechner verwalten? - The Codest
Der Codest
  • Über uns
  • Dienstleistungen
    • Software-Entwicklung
      • Frontend-Softwareentwicklung
      • Backend-Softwareentwicklung
    • Staff Augmentation
      • Frontend-Entwickler
      • Backend-Entwickler
      • Daten-Ingenieure
      • Cloud-Ingenieure
      • QS-Ingenieure
      • Andere
    • IT-Beratung
      • Prüfung und Beratung
  • Branchen
    • Fintech & Bankwesen
    • E-commerce
    • Adtech
    • Gesundheitstechnik
    • Herstellung
    • Logistik
    • Automobilindustrie
    • IOT
  • Wert für
    • CEO
    • CTO
    • Delivery Manager
  • Unser Team
  • Fallstudien
  • Gewusst wie
    • Blog
    • Begegnungen
    • Webinare
    • Ressourcen
Karriere Kontakt aufnehmen
  • Über uns
  • Dienstleistungen
    • Software-Entwicklung
      • Frontend-Softwareentwicklung
      • Backend-Softwareentwicklung
    • Staff Augmentation
      • Frontend-Entwickler
      • Backend-Entwickler
      • Daten-Ingenieure
      • Cloud-Ingenieure
      • QS-Ingenieure
      • Andere
    • IT-Beratung
      • Prüfung und Beratung
  • Wert für
    • CEO
    • CTO
    • Delivery Manager
  • Unser Team
  • Fallstudien
  • Gewusst wie
    • Blog
    • Begegnungen
    • Webinare
    • Ressourcen
Karriere Kontakt aufnehmen
Pfeil zurück ZURÜCK
2022-12-01
Software-Entwicklung

Mehrere Umgebungen für mehrere Projekte auf einem Rechner verwalten?

Bartłomiej Kuczyński

Gibt es einen goldenen Mittelweg, um viele Umgebungen für eine große Anzahl auf nur einem Rechner zu verwalten? Unser Java-Experte Bartłomiej kennt die Antwort!

Werfen wir einen Blick auf eine typische Arbeitsumgebung in einer Softwarehaus. Sie haben einige Kunden, die unterschiedliche Umgebungen haben. Einige bevorzugen MySQL, andere Postgres. Eine Version Ihrer Anwendung benötigt Java 11 und ein weiteres Java 17. Frontend braucht npm 12 oder 16, weil Sie verschiedene Versionen von eckig. Schließlich haben Sie das dreidimensionale Array, das Kombinationen aller Ihrer DBs, Backend- und Frontend-Versionen enthält. Klingt schlimm, aber eines Tages sagt Ihr Chef...

Comics<em>mit</em>Boss

Wurzeln einer multiversellen Umgebung

Die oben beschriebene Situation ist keine Seltenheit. Migrationen zwischen Sprach- oder Framework-Versionen, Aktualisierungen von Datenbanken oder einfach unterschiedliche Anforderungen von Kunden können alle Konfigurationen auf den Kopf stellen. Wir sollten eine Lösung haben, die uns hilft, diese Änderungen zu verwalten, eine Lösung, die ein paar Annahmen und/oder Anforderungen und/oder Ziele erfüllt:

  • leicht zu bedienen - einen einzigen Befehl, um eine Konfiguration oder eine Version zu ändern,
  • reiche Bibliothek - sollte mehrere Technologien und "Dinge" (Bibliotheken, Frameworks, Anwendungen) unterstützen,
  • erweiterbar - sollten Sie die Möglichkeit bieten, Ihre Plugins hinzuzufügen.

In diesem Artikel werde ich mich auf drei Bereiche konzentrieren. Erstens: Werkzeuge für Java und die JVM. Der zweite Bereich sind Werkzeuge für allgemeine Zwecke. Und drittens geht es darum, wie wir Docker zum Erreichen unserer Ziele einsetzen können.

​

Ich bin Java und arbeite auf JVM

Wenn Sie ein Java-Entwickler oder, allgemeiner ausgedrückt, Sie arbeiten mit JVM-Technologiendann können Sie SDKMAN!. Dies ist ein sehr schönes und einfach zu bedienendes Tool, das viele Bibliotheken, Frameworks und Sprachen unterstützt.

Der Installationsprozess von SDKMAN! ist ziemlich einfach. Sie müssen laufen:

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

und dann

source "$HOME/.sdkman/bin/sdkman-init.sh"

Jetzt können Sie Ihre Java, Scala und Maven Versionen.

Versionen verwalten - Beispiel

In diesem Beispiel werden wir die Version einiger Werkzeuge installieren und aktualisieren. Dies ist nur eine kleine Teilmenge der verfügbaren Tools.

Einrichtung

Nehmen wir an, Ihr neues Projekt verwendet Java 17. Sie haben keine Java Version installiert. Sie möchten sie installieren und zusätzlich ein Maven Daemon Tool hinzufügen, um die Builds zu beschleunigen. Sie müssen also auch Maven installieren. Dazu müssen Sie drei einfache Befehle ausführen:

$ sdk installieren java 17-open

$ sdk installieren maven 3.8.4

$ sdk install mvnd 0.7.1

Am Ende der Installation eines jeden Tools werden Sie gefragt, ob Sie es als Standard festlegen möchten:

Wollen Sie, dass Java 17-open als Standard eingestellt wird (Y/n):

Dies ist wichtig, wenn Sie eine neue Version einer Bibliothek oder einer Sprache installieren, denn SDKMAN! setzt diese Standardversion als global für alle Terminals des aktuellen Benutzers.

Überprüfung der Versionen und Aktualisierung

Von Zeit zu Zeit muss SDKMAN! die Indizes aktualisieren. Dabei kann es vorkommen, dass Sie eine Meldung erhalten, dass es neue Versionen von Tools gibt, die Sie verwenden. Wir können überprüfen, welche Versionen verfügbar sind, indem wir Folgendes eingeben sdk ls. Für sdk ls maven:

Verfügbare Maven-Versionen

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

    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



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

lokale Version

derzeit in Gebrauch

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

Wie wir oben sehen, hat Maven eine neuere Version als die, die wir verwenden. Das gleiche gilt für mvnd (0.8.2) und Java (19-open). Lassen Sie uns alles aktualisieren. Dazu brauchen wir nur den Installationsbefehl aufzurufen, aber dieses Mal verwenden wir keinen Versionsspezifizierer:

$ sdk installieren maven

$ sdk installieren mvnd

$ sdk installieren java

Aber etwas ist schief gelaufen. Maven und mvnd haben korrekte Versionen, aber Java hat Version 17.0.5-tem. Das liegt daran, dass die "neuste" Version des Tools vom Hersteller kontrolliert wird und nicht vom lokalen SDKMAN! Wer ist dieser Hersteller? Ein Anbieter in SDKMAN! ist jemand, der eine Version veröffentlichen kann. Wie auch immer, nehmen wir an, dass wir endlich installieren 19-geöffnetund wir haben es zum Standard gemacht, aber aus irgendeinem Grund müssen wir die 17-geöffnet.

Lokale Versionen und Versionsverwaltung für einzelne Terminals

​
Wir können eine Standard Version eines Tools, die global für alle Projekte und Terminals gilt. Wenn wir jedoch eine bestimmte Version benötigen, haben wir zwei Möglichkeiten. Die erste ist die Verwendung der sdk verwenden Befehl jedes Mal, wenn wir eine bestimmte Version eines Tools im aktuellen Terminal verwenden wollen. Die zweite Möglichkeit ist die Erstellung einer Versionsliste in einer .sdkmanrc Datei, die mit dem Projekt gespeichert wird.

Während die erste Option für den Einzelgebrauch gedacht ist, ist die zweite für die Arbeit mit Teams und die gemeinsame Nutzung von Konfigurationen zwischen Team Mitglieder.

Vor- und Nachteile von SDKMAN!

SDKMAN! ist sehr einfach zu bedienen und verfügt über eine umfangreiche Bibliothek von unterstützten Tools, Frameworks und Sprachen. Es funktioniert unter Linux, MacOS und Windows. Andererseits ist dieses Tool auf die JVM fokussiert und erfordert die Zustimmung des Autors, ein Anbieter zu sein. Darüber hinaus ist die Mechanik von .sdkmanrc ist sehr dürftig und könnte den Prozess des Wechsels von Verzeichnissen erheblich verlangsamen.

Ich würde gerne viele andere Sprachen verwenden

Wenn Sie viele Sprachen und Werkzeuge verwenden müssen, sollten Sie einen Blick auf asdf. Dieses Tool ist auf "High-Level"-Tools ausgerichtet. Während man in SDKMAN! viele Java-spezifische Tools wie Bpipe oder Znai finden kann, bietet asdf viel mehr Tools, die aber nicht so spezifisch sind. Natürlich überschneiden sich einige dieser Werkzeuge, z.B. Java, Tomcat oder mvnd sind in beiden verfügbar.

Wenn Sie Folgendes verwenden möchten asdfmüssen Sie folgende Voraussetzungen erfüllen git und locken. installiert. Danach müssen Sie nur noch:

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

und fügen Sie diese Zeilen ein ~/.bashrc file:

. $HOME/.asdf/asdf.sh

. $HOME/.asdf/Ergänzungen/asdf.bash

Jetzt können Sie Plugins und Tools in Ihren bevorzugten Versionen installieren.

Plugin-basierte Verwaltung

Im Gegensatz zu SDKMAN! asdf verwendet Plugins, um Werkzeuge zu verwalten. Bevor Sie also ein Werkzeug installieren können, müssen Sie ein Plugin installieren. Kehren wir zu unserem Beispielprojekt zurück und versuchen wir, die Umgebung zu konfigurieren, indem wir asadfsdf.

Zunächst müssen wir Plugins installieren:

asdf plugin hinzufügen java

asdf plugin hinzufügen maven

asdf-Plugin mvnd hinzufügen

Dann können wir unsere Werkzeuge installieren:

asdf install java openjdk-17

asdf install maven 3.8.4

asdf install mvnd 0.7.1

Und noch einmal, im Gegensatz zu SDKMAN! asdf ändert nichts an unserer Umgebung. Wenn wir versuchen, Java zu verwenden, erhalten wir eine Fehlermeldung wie:

Für den Befehl Java ist keine Version eingestellt

Fügen Sie eine der folgenden Versionen in Ihrer Konfigurationsdatei unter ~/.tool-versions hinzu

java openjdk-17

Wir müssen die Datei .tool-versionen im Heimatverzeichnis, um die Standardversionen zu verwalten.

Lokale und globale Versionen

Aktualisierung der Softwareversionen mit asdf ist ziemlich einfach. Wir installieren einfach eine neue Version. Da sich dieser Vorgang nicht auf die Umgebung auswirkt, können wir das jederzeit und an jeder beliebigen Stelle im Dateisystem tun. Wenn wir eine bestimmte Version einer Software verwenden wollen, müssen wir im Projektverzeichnis eine .tool-versionen Datei, die von den Teammitgliedern gemeinsam genutzt werden kann. Denken Sie daran, dass Sie sicherstellen müssen, dass alle Teammitglieder über asdf und Plugins installiert. Die Liste der Plugins, die Sie finden können hier.

Versionskonflikte

asdf unterstützt nicht nur Programmiersprachen, Frameworks und Tools wie vim oder kubernetess. Es unterstützt auch Datenbanken. In einem solchen Fall könnten wir mehrere Versionen von z. B. Postgres installieren, aber nur eine Instanz könnte laufen. Der Grund dafür ist asdf führt Befehle direkt auf dem Betriebssystem aus, ohne eine Trennschicht. Das führt zu Problemen wie "Port bereits in Gebrauch" und Ressourcenkonflikten.

Pro und Kontra

asdf ist ein sehr gutes Werkzeug, wenn Sie in einer polyglotten Umgebung arbeiten möchten. Es unterstützt viele Tools, Sprachen und Frameworks. Die Plugin-basierte Architektur macht es sehr einfach, diese zu erweitern. Einige der Werkzeuge, die in der Bibliothek enthalten sind, erfordern jedoch zusätzliche Arbeit bei der Installation, um alle erforderlichen Abhängigkeiten bereitzustellen. asdf funktioniert nicht unter Windows, auch nicht unter WSL.

Und zu guter Letzt - Docker

Wenn ich oben über den Hafenkonflikt spreche, kennen viele von Ihnen die Lösung.

Docker könnte uns in einigen Fällen helfen. Ich erwähne es aus Pflichtgefühl, weil dieses Werkzeug so groß und komplex ist, dass wir es nicht in einem Artikel behandeln können.

Zusammen mit Docker sollten wir eine docker-compose Werkzeug, das uns die Möglichkeit gibt, Umgebungen mit mehreren Containern zu koordinieren.

Vor- und Nachteile von Docker

Docker hilft uns bei der Verwaltung von Tools, die bestimmte Ressourcen, wie Ports oder Dateien, benötigen. Es trennt Instanzen in Container und gibt uns die volle Kontrolle über sie. Dennoch ist Docker ein Werkzeug, das eine Menge Komplexität in unsere Arbeitsumgebung einbringt und in einigen Fällen problematisch sein kann. Einer dieser Fälle der Verwendung von Docker in einem Test wird in einem unserer früheren Beiträge beschrieben Artikel.

Resümee

Ich weiß, dass ich nicht alle Werkzeuge beschrieben habe, die für die Verwaltung von Werkzeugversionen verwendet werden können. Es gibt noch viel mehr davon, wie zum Beispiel jEnv die SDKMAN ersetzen könnte,

oder NVM die wir verwenden können, um npm zu verwalten oder RVM für Ruby. Ich habe mich auf Tools konzentriert, die ich "auf dem Schlachtfeld getestet" habe und jedem empfehlen kann.

Ähnliche Artikel

Software-Entwicklung

9 zu vermeidende Fehler bei der Programmierung in Java

Welche Fehler sollten bei der Programmierung in Java vermieden werden? Im folgenden Beitrag beantworten wir diese Frage.

Der Codest
Rafal Sawicki Java-Entwickler
Enterprise & Scaleups Lösungen

Wie kann Java Ihr Unternehmen unterstützen?

Bevor wir beginnen, möchte ich Sie an eine wichtige Sache erinnern. Java ist nicht nur eine Programmiersprache.

Bartlomiej Kuczynski
Software-Entwicklung

Testcontainer - Wie kann man Tests vereinfachen?

Suchen Sie nach einer Möglichkeit, Tests auf einfachere Weise zu erstellen? Wir haben Sie! Lesen Sie den folgenden Artikel und erfahren Sie, wie Sie es möglich machen.

Bartlomiej Kuczynski
Software-Entwicklung

Javascript-Tools in Aktion

Entdecken Sie einige JavaScript-Tools, um Ihr Programmierspiel zu verbessern. Erfahren Sie mehr über ESLint, Prettier und Husky!

Der Codest
Reda Salmi React Entwickler
Software-Entwicklung

Asynchron und einfädig JavaScript?

JavaScript ist eine Single-Thread-Sprache und gleichzeitig auch nicht-blockierend, asynchron und nebenläufig. Dieser Artikel wird Ihnen erklären, wie das geschieht.

Lukasz Kolko

Abonnieren Sie unsere Wissensdatenbank und bleiben Sie auf dem Laufenden über das Fachwissen aus dem IT-Sektor.

    Über uns

    The Codest - Internationales Software-Unternehmen mit technischen Zentren in Polen.

    Vereinigtes Königreich - Hauptsitz

    • Büro 303B, 182-184 High Street North E6 2JA
      London, England

    Polen - Lokale Tech-Hubs

    • Fabryczna Office Park, Aleja
      Pokoju 18, 31-564 Kraków
    • Brain Embassy, Konstruktorska
      11, 02-673 Warszawa, Polen

      Der Codest

    • Startseite
    • Über uns
    • Dienstleistungen
    • Fallstudien
    • Gewusst wie
    • Karriere
    • Wörterbuch

      Dienstleistungen

    • IT-Beratung
    • Software-Entwicklung
    • Backend-Softwareentwicklung
    • Frontend-Softwareentwicklung
    • Staff Augmentation
    • Backend-Entwickler
    • Cloud-Ingenieure
    • Daten-Ingenieure
    • Andere
    • QS-Ingenieure

      Ressourcen

    • Fakten und Mythen über die Zusammenarbeit mit einem externen Softwareentwicklungspartner
    • Aus den USA nach Europa: Warum entscheiden sich amerikanische Start-ups für eine Verlagerung nach Europa?
    • Tech Offshore Development Hubs im Vergleich: Tech Offshore Europa (Polen), ASEAN (Philippinen), Eurasien (Türkei)
    • Was sind die größten Herausforderungen für CTOs und CIOs?
    • Der Codest
    • Der Codest
    • Der Codest
    • Privacy policy
    • Website terms of use

    Urheberrecht © 2025 von The Codest. Alle Rechte vorbehalten.

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