Ich versuche derzeit, das Abhängigkeitsmanagement für Builds (ala Maven, Ivy, NuGet) zu übernehmen und ein internes Repository für gemeinsam genutzte Module zu erstellen, von denen wir über ein Dutzend unternehmensweit haben. Was sind die Hauptverkaufsargumente dieser Bautechnik? Die, die ich bisher habe:
- Erleichtert das Verteilen und Importieren freigegebener Module, insbesondere von Versions-Upgrades.
- Erfordert eine genaue Dokumentation der Abhängigkeiten gemeinsam genutzter Module.
- Entfernt gemeinsam genutzte Module aus der Quellcodeverwaltung, beschleunigt und vereinfacht das Auschecken / Einchecken (wenn Sie Anwendungen mit mehr als 20 Bibliotheken haben, ist dies ein echter Faktor) .
- Ermöglicht mehr Kontrolle oder Kenntnis darüber, welche Bibliotheken von Drittanbietern in Ihrer Organisation verwendet werden.
Gibt es Verkaufsargumente, die mir fehlen? Gibt es Studien oder Artikel, die Verbesserungskennzahlen enthalten?
dependency-management
Kreuz
quelle
quelle
Antworten:
Ich bin mir nicht 100% sicher. Hier sind ein paar Negative
Am Ende fügen Sie häufig Abhängigkeiten zu Servern / Endpunkten von Drittanbietern hinzu, die möglicherweise nicht stabil sind.
Ich habe es mit bower passieren lassen, dass das Repo einiger Abhängigkeiten gelöscht oder verschoben wurde. Also kommt ein neuer Entwickler, klont mein Repo, tippt
bower install
und bekommt Fehler für nicht zugängliche Repos. Wenn ich stattdessen den Code eines Drittanbieters in mein Repo eingecheckt hätte, verschwindet dieses Problem.Dies wird gelöst, wie es das OP vorschlägt, wenn Sie Deps von Kopien abrufen, die auf einem von Ihnen ausgeführten Server gespeichert sind.
Härter für Noobs.
Ich arbeite mit Kunststudenten mit sehr wenig Kommandozeilenerfahrung. Sie machen Kunst mit Processing, Arduino, Unity3D und kommen mit sehr wenig technischem Wissen aus. Sie wollten etwas HTML5 / JavaScript verwenden, das ich geschrieben habe. Schritte wegen Laube
npm install -g bower
)bower install
(endlich um unsere Abhängigkeiten zu bekommen)Die Schritte 2 bis 5 können alle gelöscht werden, wenn wir nur die Dateien in unser Github-Repo einchecken. Diese Schritte klingen für Sie und mich wahrscheinlich sehr einfach. Für die Schüler waren sie sehr verwirrend und sie wollten wissen, welche Schritte wo und wofür sie waren, was möglicherweise ein gutes Lernen sein könnte , aber völlig orthogonal zum Klassenthema war und so wahrscheinlich schnell vergessen wurde.
Beim Hinzufügen wird ein weiterer Schritt hinzugefügt.
Es ist oft passiert, dass ich einen
git pull origin master
Code mache und dannbower install
teste. Es dauert 5 bis 10 Minuten, bis ich mich daran erinnere, dass ich tippen musste , um die neuesten Deps zu erhalten. Ich bin sicher, das lässt sich leicht mit einem Pull-Script-Hook lösen.Es macht die Verzweigung von Git schwieriger
Wenn 2 Zweige unterschiedliche Deps haben, sind Sie irgendwie geschraubt. Ich nehme an, Sie können
bower install
nach jedem tippengit checkout
. Soviel zur Geschwindigkeit.Was Ihre positiven Aspekte betrifft, denke ich, dass es zu jedem dieser Beispiele Gegenbeispiele gibt
vs was? Es ist sicherlich nicht einfacher zu verteilen. Das Ziehen eines Repos anstelle von 20 ist nicht einfacher und schlägt eher fehl. Siehe Nr. 1 oben
Umgekehrt bedeutet dies, dass Sie für Korrekturen von anderen abhängig sind. Das heißt, wenn Ihre Deps von einer Quelle eines Drittanbieters stammen und Sie einen behobenen Fehler benötigen, müssen Sie warten, bis sie Ihren Patch anwenden. Schlimmer noch, Sie können wahrscheinlich nicht nur die gewünschte Version und Ihren Patch verwenden, sondern müssen auch die neueste Version verwenden, die möglicherweise nicht abwärtskompatibel mit Ihrem Projekt ist.
Sie können dies lösen, indem Sie die Repos separat klonen und dann Ihre Projektabteilungen auf Ihre Kopien verweisen. Anschließend wenden Sie Korrekturen an Ihren Kopien an. Natürlich können Sie das auch tun, wenn Sie nur die Quelle in Ihr Repo kopieren
Das scheint fraglich. Fordern Sie die Entwickler lediglich auf, Bibliotheken von Drittanbietern in einem eigenen Ordner unter abzulegen
<ProjectRoot>/3rdparty/<nameOfDep>
. Es ist genauso einfach zu sehen, welche Bibliotheken von Drittanbietern verwendet werden.Ich sage nicht, dass es keine positiven Ergebnisse gibt. Das letzte Team, in dem ich war, hatte> 100 Deps von Drittanbietern. Ich weise nur darauf hin, dass es nicht nur Rosen sind. Ich überlege, ob ich zum Beispiel die Laube für meine Bedürfnisse loswerden soll.
quelle
install
jedes Mal auszuchecken, scheint ein Designfehler zu sein. Es sollte seine Konfiguration überprüfen, wenn es ein Projekt erstellt: Wenn es Änderungen gibt, sollte es von Grund auf neu erstellt werden. Das Verschieben von Repos ist für Maven ebenfalls irrelevant, da Artefakte aus dem Maven-Repository abgerufen werden, in dem Artefakte gespeichert werden, nicht die tatsächlichen Repos mit Code. Sie können sich nur ändern ,artifactId
undgroupId
in der nächsten Version des Artefakts , wenn Sie es in Maven - Repository veröffentlichen. Daher sind Ihre Punkte 1 und 4 für Maven besonders irrelevant. # 3 kann ersetzt werdenmvn clean
(manchmal)Schauen Sie sich die Twelve Factor App an
Lesen Sie insbesondere, was sie über Abhängigkeiten zu sagen haben . Sie werden feststellen, dass gutes Design einen deklarativen Mechanismus zum Auffinden von Abhängigkeiten bietet. In Java wird dies häufig über Maven realisiert. Ivy und NuGet funktionieren gut, aber Maven ist derzeit führend auf diesem Gebiet und Ivy ist ausgesprochen harte Arbeit.
Wenn Sie sich an den Maven-Release-Prozess halten (entwickeln Sie Snapshots, bis eine formale Release fertig ist, versuchen Sie niemals, eine frühere Release zu überschreiben, verwenden Sie einen geeigneten Repository-Manager wie Nexus oder Artifactory), sollten Sie einen Build-Prozess haben, der gut läuft.
Sobald Sie einen soliden deklarativen Erstellungsprozess eingerichtet haben, öffnet sich die Tür zu anderen bewährten Methoden wie der kontinuierlichen Integration mit Jenkins und der kontinuierlichen Code-Analyse mit Sonar, und Sie werden nach einer besseren Verzweigungsstrategie für die Versionskontrolle mit git suchen .
Jedes der oben genannten Elemente baut auf dem Kern von Maven auf. Heutzutage ist es eine einfache Entscheidung.
quelle
Und die Nummer 1 auf unserer Top 10 Liste ist ...
(Trommelwirbel)
Jeder Entwickler erstellt mit genau den gleichen Versionen aller Abhängigkeiten, sodass Sie sich nie fragen müssen, was in der Produktion bereitgestellt werden soll.
quelle