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, Python, Go und .NET.

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.

Technologie Wo das Artefakt landet Was Trennen rückgängig macht
npm kopiert über das node_modules/<Paket> des Verbrauchers löscht die Kopie und stellt den ursprünglichen Ordner wieder her
Maven und Gradle das lokale Repository (~/.m2), aus dem alle Verbraucher auflösen löscht diese Version aus dem lokalen Repository (Maven lädt sie erneut vom Remote)
Python das Wheel (.whl), installiert in die virtuelle Umgebung jedes Verbrauchers deinstalliert es und installiert die Version wieder, die vorher da war
.NET der globale NuGet-Ordner (~/.nuget/packages), aus dem alle Verbraucher auflösen löscht diese Version aus dem globalen Ordner (das nächste restore holt sie wieder)
Go nirgendwo: eine go.work im Repo des Verbrauchers zeigt auf das lokale Modul entfernt diesen Eintrag aus der go.work (und die ganze Datei beim Trennen der letzten)

In allen sechs 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, go.mod → Go, *.csproj → .NET. 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, der Modulpfad in Go (github.com/acme/core) und die Paket-Id in .NET.

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:

    Technologie Build-Vorgabe Pfad des Artefakts
    npm npm run build dist/<letztes Segment des Pakets>
    Maven ${mvn} install -DskipTests target
    Gradle ${gradle} publishToMavenLocal -x test build/libs
    Python python -m build --wheel dist
    Go go build ./... das Repo selbst (.)
    .NET dotnet pack -c Release bin/Release
  • 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, das require der go.mod, die PackageReference einer .csproj); 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:

Aktion Was sie tut
Installieren Installiert die Abhängigkeiten der Bibliothek in ihrem Repo (der Build tut es von selbst, wenn sie fehlen).
Bauen Erzeugt das Artefakt.
Verknüpfen Baut und legt das Artefakt dort ab, wo jeder Verbraucher es auflöst (siehe Tabelle oben).
Trennen Macht die Verknüpfung bei jedem Verbraucher rückgängig und stellt den vorherigen Zustand wieder her.
Überwachen Macht 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/, bin/, obj/, vendor/, 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 der JVM landet das Paket in einem Speicher der Maschine, die Verknüpfung gilt also für alle Micros auf einmal. Zwei Dinge, die man wissen sollte:

  • Der Verbraucher muss dieselbe Version referenzieren, die die Bibliothek packt. Referenziert er eine andere, wird die aus der üblichen Quelle aufgelöst und von der Verknüpfung ist nichts zu sehen; Aseptic sagt es Ihnen, statt es durchgehen zu lassen.
  • Beim Verknüpfen wird jeder Verbraucher einmal restauriert, mit dem Artefakt-Ordner als zusätzliche Quelle. Das ist nötig: NuGet vertraut der Kopie, die es schon hat, also würde ohne diesen Schritt ein Neubau ohne Versionssprung nichts ändern.

In Go gibt es kein Artefakt: eine Bibliothek sind ihre Quellen, und wer sie nutzt, kompiliert sie. Verknüpfen schreibt eine go.work ins Repo des Verbrauchers mit einem use, das auf Ihre lokale Kopie zeigt — genau der Ort, den Go dafür vorsieht (und warum es empfiehlt, sie nicht zu versionieren). Hatte der Verbraucher schon eine go.work, wird sie beiseitegelegt und kommt unversehrt zurück, sobald die letzte Bibliothek getrennt wird. Seine go.mod wird nicht angefasst: ein replace wäre kürzer gewesen, lebt aber in seiner Abhängigkeitsdatei und seiner Git-Historie.

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, requirements.txt, go.mod oder .csproj an. Angefasst wird, was außerhalb von Git liegt — node_modules, das lokale Repository, der globale NuGet-Ordner, die virtuelle Umgebung, die go.work —, 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 vorher: Die Dienste, die sie verknüpft hatten, erhalten ihren vorherigen Stand zurück. Lässt sich einer nicht trennen, wird die Bibliothek nicht gelöscht, und der Hinweis nennt ihn.

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.