Zum Inhalt springen

Bereich Bibliotheken

Der Bereich Bibliotheken erlaubt Ihnen, eine geteilte Bibliothek lokal zu entwickeln und sie in den Micros zu sehen, die sie nutzen, ohne sie in einer Registry zu veröffentlichen. Aseptic baut ihr Artefakt und verknüpft es mit jedem Verbraucher. Unterstützt werden Bibliotheken für npm, Maven, Gradle und Python.

Es ist ein Bereich mit einem Liste-+-Detail-Muster (wie Micros): auf der Seite der Bibliothekskatalog; in der Mitte das bearbeitbare Detail der ausgewählten.

Das hängt von der Technologie ab, denn jedes Ökosystem löst seine Abhängigkeiten an einer anderen Stelle auf. Sie wählen den Mechanismus nicht: Aseptic leitet ihn daraus ab, was die Bibliothek ist.

TechnologieWo das Artefakt landetWas Trennen rückgängig macht
npmkopiert über das node_modules/<Paket> des Verbraucherslöscht die Kopie und stellt den ursprünglichen Ordner wieder her
Maven und Gradledas lokale Repository (~/.m2), aus dem alle Verbraucher auflösenlöscht diese Version aus dem lokalen Repository (Maven lädt sie erneut vom Remote)
Pythondas Wheel (.whl), installiert in die virtuelle Umgebung jedes Verbrauchersdeinstalliert es und installiert die Version wieder, die vorher da war

In allen drei Fällen ist es umkehrbar: jede Verknüpfung hinterlässt eine Markierung, und Trennen macht nur rückgängig, was Aseptic abgelegt hat. Ein Artefakt, das schon da war — eine aus der Registry geladene Version —, wird nie angefasst.

Über den Hinzufügen-Knopf (obere Leiste) —auch im leeren Hintergrund des Bereichs angeboten, wenn es noch keine gibt—:

  • Bibliothek hinzufügen — Sie wählen den Ordner des Repos. Sobald Sie das tun, zeigt Ihnen Aseptic, was es erkannt hat, bevor irgendetwas hinzugefügt wird: die Technologie, den Paketnamen, die Version und welche Micros des Katalogs sie bereits deklarieren. Ist der Ordner keine Bibliothek, die es bauen kann, sagt es das dort und lässt Sie nicht fortfahren.
  • Aus Git importieren — klont das Repo und fügt sie hinzu. Hier gibt es keine Vorschau: bis nach dem Klonen liegt nichts auf der Platte, das man ansehen könnte.

Die Technologie wird aus dem Repo abgeleitet: pom.xml → Maven, build.gradle → Gradle, package.json mit name → npm, pyproject.toml/setup.py → Python. Das Paket ist der Name so, wie ihn schreiben würde, wer sie nutzt: der name aus der package.json, groupId:artifactId in der JVM, der Distributionsname in Python.

Identität und Build-Rezept. Es speichert von selbst (Autosave mit kleiner Verzögerung, wie in Micros; kann in Einstellungen deaktiviert werden):

  • Name und Paket.

  • Technologie — die beim Hinzufügen abgeleitete. Sie können sie ändern, falls sie danebenlag.

  • Build — der Befehl, der das Artefakt baut, und der Pfad des Artefakts. Wenn Sie sie nicht deklarieren, werden die des Profils ihrer Technologie verwendet:

    TechnologieBuild-VorgabePfad des Artefakts
    npmnpm run builddist/<letztes Segment des Pakets>
    Maven${mvn} install -DskipTeststarget
    Gradle${gradle} publishToMavenLocal -x testbuild/libs
    Pythonpython -m build --wheeldist
  • Verbraucher — die Micros, die die Bibliothek nutzen. Standardmäßig werden sie von selbst erkannt, indem gelesen wird, wer dieses Paket deklariert (package.json, pom.xml, build.gradle, requirements.txt, pyproject.toml); Sie können sie von Hand festlegen (durch Kommas getrennte Micro-IDs).

  • Änderungen überwachen — baut neu und verknüpft automatisch erneut bei Codeänderungen.

${mvn} und ${gradle} werden durch die ausführbare Datei des Repos ersetzt: seinen Wrapper (mvnw, gradlew), falls vorhanden, sonst die globale. So gilt das Rezept auf allen Rechnern des Teams gleich.

Pro Bibliothek:

AktionWas sie tut
InstallierenInstalliert die Abhängigkeiten der Bibliothek in ihrem Repo (der Build tut es von selbst, wenn sie fehlen).
BauenErzeugt das Artefakt.
VerknüpfenBaut und legt das Artefakt dort ab, wo jeder Verbraucher es auflöst (siehe Tabelle oben).
TrennenMacht die Verknüpfung bei jedem Verbraucher rückgängig und stellt den vorherigen Zustand wieder her.
ÜberwachenMacht Bauen + Verknüpfen live bei jeder Änderung. Benötigt die aktive Engine.

Der Status jeder Bibliothek (gebaut / nicht gebaut, in N Verbrauchern verknüpft, wird überwacht) wird in der Liste und im Detail angezeigt.

Beim Überwachen ignoriert Aseptic, was der Build selbst schreibt — node_modules, target, build/, die virtuelle Umgebung und die Caches —, um nicht in eine endlose Neubau-Schleife zu geraten.

In der JVM lebt das Artefakt nicht im Repo des Verbrauchers, sondern in Ihrem lokalen Repository. Das hat zwei Folgen:

  • Die Verknüpfung gilt für alle Micros auf einmal, ob sie im Szenario sind oder nicht.
  • Lässt Ihre Bibliothek ihre Version nicht aus dem Repo auflösen (eine pom.xml, die sie über ${revision} erbt, eine group, die in einem Gradle-Skript berechnet wird), sagt die Verknüpfung es Ihnen. Das lässt sich lösen, indem Sie die Version im YAML der Bibliothek deklarieren (stack.version).

Wie in Micros enthält das Detail einer Bibliothek ihr Git: Branch wechseln, fetch und pull (--ff-only). Der Zugriff ist nur lesend (macht nie push), und wenn es nicht committete Änderungen gibt, warnt Aseptic vor dem Branch-Wechsel oder dem Aktualisieren.

Wurde der Ordner einer Bibliothek verschoben, markiert das Detail es und bietet an, sie neu zu verorten: Sie wählen den neuen Ordner und der Pfad wird gespeichert.

Aseptic verändert weder das Repo des Verbrauchers noch das der Bibliothek: es fasst weder deren package.json noch pom.xml noch requirements.txt an. Angefasst wird, was außerhalb von Git liegt — node_modules, das lokale Repository, die virtuelle Umgebung —, und immer mit einer Markierung, um es zurücknehmen zu können.

Bei npm gibt es eine Ausnahme, die man kennen sollte: ein npm install beim Verbraucher überschreibt sein node_modules und reißt die Verknüpfung mit. Aseptic merkt das und verknüpft danach erneut. Bei Maven und Gradle passiert das nicht, weil das Artefakt dort nicht lebt.

Eine Bibliothek aus dem Katalog zu löschen, trennt sie nicht: war sie verknüpft, trennen Sie sie vorher im Detail.

aseptic library detect/list/status/build/link/unlink/watch. Die nur lesenden (library_detect, library_list, library_status) sind auch als Werkzeuge des MCP verfügbar.