Wir haben zwei interne Projekte, A und B, die von verschiedenen Teams entwickelt wurden, wobei B von A abhängig ist. Da der Quellcode für beide Projekte in git gespeichert ist, habe ich Projekt A als Submodul in Projekt B aufgenommen und das Build-System konfiguriert beides in der richtigen Reihenfolge zu bauen. Eine alternative Lösung wäre, A über einen binären Repository-Manager wie Artifactory oder Nexus zu konsumieren.
Ich frage mich über die Vor- und Nachteile von Quellcode und Binärartefakten. Wann ist einer besser als der andere? Bisher habe ich mir folgende Faktoren ausgedacht, aber ich bin sehr gespannt auf andere Meinungen.
Je nach Quellcode ist besser
- Wenn Sie keinen binären Repository-Manager haben
- Wenn Sie von der Vorabversion eines anderen Projekts abhängig sein müssen
- Wenn Sie ein anderes Projekt patchen müssen
- weil es einfacher ist, den Quellcode von Abhängigkeiten in der IDE zu durchsuchen
Abhängig von Binärdateien ist besser
- Bauzeit zu minimieren
- um den Aufwand beim Einrichten der Build-Umgebung eines anderen Projekts zu vermeiden
builds
repository
dependency-management
mkalkov
quelle
quelle
Antworten:
Ich würde immer binäre Abhängigkeiten gegenüber Quellabhängigkeiten empfehlen. Die meisten der Profis, die Sie für den Quellcode auflisten, können auch problemlos in binäre Abhängigkeiten integriert werden.
Erstens ist es sehr schnell, ein Nexus-Repo auf einem lokalen Server einzurichten. Die Vorteile eines binären Repos überwiegen bei weitem den Einrichtungsaufwand / die Einrichtungskosten. Dies ist fast eine Voraussetzung für den Rest meiner Antwort :)
Bei Vorabversionen sollten Ihre Projekte -SNAPSHOT-Versionen in der Artifactory bereitstellen. Es kann eine schöne und klare Unterscheidung zwischen Versionen geben, wie zum Beispiel:
projectA-3.2.0-SNAPSHOT
: Aktive Entwicklung, kann sich jederzeit ändernprojectA-3.2.0-RC1
: Kandidat freigebenprojectA-3.2.0
: ProduktionsfreigabeAlle diese Versionen können zusammen in Ihrem Artefakt gespeichert werden. Ihre Projekte würden genau wissen, gegen was sie kompilieren.
Für Patches
git
ist dein Freund. Fork das Repo und geben Sie eine Patch-Versionsnummer ein, wie zprojectA-3.2.1-FOR_PROJ_B
. Beachten Sie die .1, die eine Patch-Version und auch den Deskriptor zeigt. Dies erleichtert es dem Projekt auch, diese Änderungen später wieder in den Master zu übernehmen.Für den Quellcode können Sie Ihr Build-Tool so konfigurieren, dass ein "Quell-Jar" generiert und neben dem binären Jar in der Artifactory bereitgestellt wird. Die meisten IDEs können den Namen des Quell-JARs nachschlagen und die Quelle automatisch für Sie herunterladen.
Ein weiterer wichtiger Grund, sich vom Quellcode fernzuhalten, besteht darin, dass Sie an die Abhängigkeiten von Buildsystem, Toolkette und Kompilierungszeit von Projekt A gebunden sind. Wenn in Projekt B ein Buildfehler auftritt, müssen Sie zunächst untersuchen, ob Projekt A oder Projekt B hat einen Fehler verursacht. Wenn es sich um Projekt A handelte, müssen Sie Personen aus diesem Projekt aufspüren, um deren Build zu korrigieren. Dies erhöht den Overhead Ihres Erstellungszyklus erheblich.
quelle
Ich würde mich für eine binäre Abhängigkeit entscheiden, da fast keine Ihrer Überlegungen, die mich begünstigen, ohne Kritik ist:
Wenn Sie keinen binären Repository-Manager haben: Das ist in Ordnung, aber ich denke nicht, dass es so schwierig ist, einen zu etablieren. In der einfachsten Ebene ein freigegebener Ordner, in den nur die Verantwortlichen schreiben können, welche Version verwendet wird.
Wenn Sie sich auf die Vorabversion eines anderen Projekts verlassen müssen: Metacubed hat es bereits behandelt. Entweder mit Quellcode oder binären Abhängigkeiten sollten Sie sich an eine gut etablierte Version halten, auch wenn es sich um eine Vorabversion handelt. Wenn Sie gegen eine Vorabversion entwickeln, besteht die Wahrscheinlichkeit, dass Sie aufgrund von Fehlerbehebungen häufig zu einer aktualisierten Version wechseln müssen.
Wenn Sie ein anderes Projekt patchen müssen: Meinen Sie damit, dass Ihr Team das Projekt patchen wird, das von einem anderen Team im selben Haus erstellt wurde? Ich würde sagen, die vernünftigste Strategie ist es, dem anderen Team die Probleme mitzuteilen, die Sie mit ihrem Projekt haben.
weil es einfacher ist, den Quellcode von Abhängigkeiten in IDE zu durchsuchen: Sie sollten nicht in das Innenleben Ihrer Abhängigkeiten eintauchen müssen, da dies Folgendes bedeutet:
quelle