In meinen Jahren als Programmierer für Java und in jüngerer Zeit für Scala habe ich noch nie Ant, Maven, Gradle oder eines dieser Build-Tools für Java verwendet. Überall, wo ich gearbeitet habe, gab es einen Build-Manager, der sich darum kümmerte - ich kompilierte lokal mit der IDE für Entwicklung und Komponententests, checkte dann den Quellcode ein und benachrichtigte den Build-Manager, der tat, was nötig war Kompilieren Sie alle Dateien für die freigegebene Umgebung.
Jetzt, da ich zwischen Verträgen bin, arbeite ich an meinem eigenen selbst finanzierten Projekt und es ist an einem Punkt angelangt, an dem es gut genug sein könnte, um tatsächlich Geld zu verdienen. Ich habe sogar einen potenziellen Investor angestellt und plane, diesen in den nächsten Wochen eine Beta-Version zu präsentieren.
Aber die ganze Zeit klicke ich einfach auf den Build-Button in der IDE, und es erstellt die Jar-Datei und es funktioniert einwandfrei. Natürlich schlägt die konventionelle Weisheit vor, dass ich meine eigenen Ant / Maven / Gradle-Skripte schreiben und diese anstelle der IDE verwenden sollte, aber was sind die konkreten Vorteile davon in meiner Situation (alleine arbeiten)?
Ich habe etwas über die Verwendung dieser Build-Tools gelesen und es sieht so aus, als würde ich Hunderte von Zeilen XML (oder Groovy oder was auch immer) schreiben, um mit einem Klick das zu tun, was die IDE macht (die IDE-generierte) Ant XML für das Projekt besteht aus über 700 Zeilen. Es sieht einfach fehleranfällig und zeitaufwendig aus und ist für meine Situation unnötig. Ganz zu schweigen von der Lernkurve, die all die anderen Arbeiten, die ich mache, zeitraubend macht, um das Produkt für die Präsentation der Menschen vorzubereiten.
quelle
Antworten:
Ich würde vorschlagen, dass Sie Maven im Gegensatz zu Ant verwenden. Wenn Ihre IDE Ihr Projekt mit einem Klick erstellen kann, ist es wahrscheinlich, dass Maven Ihr Projekt auch praktisch ohne benutzerdefinierte Konfiguration erstellen kann.
Um die Frage zu beantworten, ist die Vereinfachung des Bereitstellungsprozesses ein konkretes Beispiel. Wenn Sie eine verteilbare Datei lokal erstellen, bedeutet dies, dass Sie diese verteilbare Datei manuell auf Ihrem Produktionssystem bereitstellen müssen, und dass Sie wahrscheinlich einige manuelle Konfigurationsschritte auf dem Produktionssystem durchführen mussten, um es für die Bereitstellung vorzubereiten (Installation von Tomcat) (möglicherweise oder Kopieren über Abhängigkeiten und Ressourcen, die für Ihre Anwendung erforderlich sind). Dies kann zeitaufwändig sein und die Bereitstellung von Updates zu einem mühsamen manuellen Vorgang machen. Außerdem können möglicherweise geringfügige Konfigurationsunterschiede zwischen Ihrer Produktionsplattform und Ihrer Entwicklungsumgebung zu undurchsichtigen und schwer auffindbaren Fehlern führen.
Um diese manuelle Plackerei loszuwerden, konfiguriere ich mein Projekt so, dass es mit Maven erstellt wird, und konfiguriere meine
pom.xml
Datei mit allen erforderlichen Informationen, um (im Fall einer Java-Web-App) die zu finden und herunterzuladen Richtigen Sie die Version von Tomcat, installieren Sie sie lokal, richten Sie die richtigen Tomcat-Konfigurationsdateien ein, stellen Sie alle Projektabhängigkeiten und die Projekt-WAR-Datei selbst bereit und starten Sie dann Tomcat. Ich erstelle dann ein einfaches Shell-Skript (und auch eine.bat
Version für Windows), das Maven verwendet, um den Server zu erstellen und zu starten:Anstatt also eine implementierbare Umgebung in meine Entwicklungsumgebung zu packen und sie dann manuell in die Produktion hochzuladen, muss ich sie nur vom Versionskontrollsystem auf den Produktionsserver synchronisieren und dann das Produktionssystem selbst erstellen, installieren und ausführen das Deployment (und zwar auf eine Weise, die mit der Vorgehensweise auf jedem Entwicklungssystem identisch ist, wodurch die Möglichkeit plattformspezifischer Fehler oder Fehlkonfigurationen minimiert wird). Und ob in der Entwicklungs- oder Produktionsumgebung, alles, was ich tue, um den Server zu erstellen und zu starten, ist:
Um ein Update für die Produktionsumgebung bereitzustellen, müssen Sie lediglich folgende Schritte ausführen:
svn update -r<target_release_revision>
../startServer.sh
.Es ist einfach, leicht zu merken und überhaupt nicht möglich, wenn ich mich darauf verlassen würde, meine IDE zu verwenden, um das Deployment für mich zu erstellen. Es macht auch das Zurücksetzen auf die zuletzt bekannte gute Bereitstellung zu einem Kinderspiel, falls jemals ein Rollback erforderlich sein sollte.
Ich kann nicht einmal zählen, wie viel Zeit mir dieser Ansatz beim manuellen Verwalten des Bereitstellungs- und Konfigurationsprozesses erspart hat.
Und natürlich ist eine andere Antwort auf Ihre Frage das automatische Abhängigkeitsmanagement, aber ich glaube, das wurde bereits von anderen Antworten abgedeckt.
quelle
Solange sich Ihr Code in der Quellcodeverwaltung befindet, ist die Verwendung der IDE zur Erstellung Ihrer verteilbaren Dateien in Ordnung.
Ist es für Sie als Ein-Mann-Shop besser, Ihrem Produkt neue Funktionen hinzuzufügen oder Build-Skripte zu schreiben? Etwas sagt mir, dass es keine Build-Skripte schreibt.
quelle
Klar, es ist schwieriger, die Vorteile zu erkennen, wenn Sie alleine arbeiten. Persönlich habe ich an vielen Solo-Projekten gearbeitet und würde nicht nur ein Build-Skript schreiben, sondern auch die Mühe machen, einen CI-Server (wie Jenkins) einzurichten.
Es gibt natürlich Overhead, warum sollte es sich lohnen?
Für mein aktuelles Projekt erstellt das Skript statische Analysetools, komprimiert js / css, Komponententests und Pakete in ein Webarchiv. Jenkins führt es nach jedem Commit aus und stellt das Projekt auf einem Testserver bereit.
Ich die Zeit , um dies einzurichten nahm (die Build - Skript ist vielleicht 300 Zeilen durch die Art und Weise, haben es nicht in Monaten berührt) und es lohnt sich, auch für eine Person sagen. Für mehr als eine Person ist es notwendig. Meine Beteiligung am Build / Deployment-Prozess besteht aus den Befehlen "hg commit" und "hg push".
quelle
Vorteile von Build-Tools
Es ist eine kurze Zusammenfassung, die nur die Spitze des Eisbergs zeigt, und Sie werden nicht unbedingt die Wichtigkeit all dessen bemerken, es sei denn, Sie müssen eine Kombination aus vielen Projekten, großen Projekten und mittleren bis großen Teams erstellen. Aber wenn Sie Vertrauen haben und es versuchen, werden Sie die Vorteile ernten .
Sie erleichtern Ihren Entwicklungslebenszyklus und ermöglichen Ihnen Folgendes:
Wenn wir das auf Maven anwenden ...
Für diejenigen unter Ihnen in der Java-Welt, die Maven verwenden , haben Sie beim Lesen natürlich jeden Punkt mit Folgendem verknüpft:
Und natürlich Maven (aber auch andere Werkzeuge als auch) gibt Ihnen Abhängigkeitsmanagement , und das ist eine große Zeit und Raum Schoner für Sie (einkalkuliert die Zahl der Menschen in Ihrem Team) und Ihr SCM.
Alles ist relativ:
Ich verwende Maven als Beispiel, weil ich denke, dass es das umfassendste und "batteriebetriebenste" Build-System ist, aber es bedeutet nicht, dass es unbedingt das "beste" ist. Es passt jedoch zu allen oben aufgelisteten Kontrollkästchen, und wenn ich nach einem guten Build-System suche, vergleiche ich es mit dieser Liste und Maven. Maven ist jedoch nicht immer sehr flexibel - es ist jedoch sehr erweiterbar - wenn Sie von Ihrem standardisierten Prozess abweichen. Es steigert Ihre Produktivität im Allgemeinen (einmal vor der Lernkurve), nicht wenn Sie dagegen ankämpfen.
quelle
Hier sind meine 4 wichtigsten Gründe für die Verwendung von Build-Tools:
quelle
In dem Buch Pragmatic Programmer sagen Andrew Hunt und David Thomas, dass 'checkout-build-test-deploy' ein einziger Befehl sein sollte (Kapitel: Pragmatic Projects). Sie schrieben..
Dann bin ich sicher, dass Ihr Team wachsen wird. Umso wichtiger ist es, dass automatische Testbereitstellungsfähigkeiten durchgeführt werden.
Das große XML (Skript), das Sie gesehen haben, ist in der Regel eine einmalige Aufgabe. In den meisten Projekten können dieselben Skripte verwendet werden.
Es ist nicht klar, wie groß das Projekt ist. Wenn Ihre integrierten Tests / Abnahmetests viel CPU / Speicher beanspruchen, können Sie einen anderen Computer als Testserver verwenden. Sie können auch eine Vielzahl von Tools bereitstellen, um den Quellcode / Byte-Code zu analysieren .
quelle
Ich würde argumentieren, dass es für einen Einzelentwickler weitaus wichtiger ist, über einen guten Prozess und eine gute Struktur wie bei Skript-Builds zu verfügen, als wenn Sie Mitglied eines Teams sind. Grund dafür ist, dass Sie keine Teamkollegen haben, die Sie anrufen, wenn Sie Kurven fahren. Ein CI-Server, auf dem Ihr Build-Skript ausgeführt wird, ist ein großartiger, kompromissloser Teamkollege, um Sie ehrlich zu halten.
quelle
Wenn Ihre Codebasis wächst, möchten Sie eine Testsuite hinzufügen. Ich habe die Erfahrung gemacht, dass dies eher früher als später erfolgen sollte und dass Ihr nächtlicher Build (oder was auch immer) jedes Mal alle Tests ausführen sollte. Fangen Sie klein an, das automatisch generierte XML ist wahrscheinlich in Ordnung. Wenn Sie Angst haben, etwas zu ändern, weil Sie befürchten, etwas anderes zu zerbrechen, ist dies ein guter Anreiz, ein paar Testfälle aufzuschreiben.
quelle
Mit einem Build, der keine IDE ist, können Sie problemlos alte Versionen wiederherstellen, ohne sich Gedanken über die Neukonfiguration Ihrer IDE zu machen. Mit diesem Build können Sie den Build nicht interaktiv ausführen, um einen nächtlichen Build zu erstellen, den die Benutzer testen oder schnell herausfinden können Wenn Sie Tests abgebrochen haben, ohne sich daran erinnern zu müssen, sie auszuführen, und warten, bis sie abgeschlossen sind.
Sie können damit auch Builds in Umgebungen ohne grafische Benutzeroberfläche ausführen, z. B. auf einen Server übertragen, und Sie können IDEs wechseln, ohne befürchten zu müssen, dass Sie nicht mehr in der Lage sind, Ihre Software zu erstellen.
Einige Build-Tools unterstützen Sie bei der Automatisierung des Tagging und der Bereitstellung von Releases, enthalten angemessene Standardeinstellungen für die Erstellung von Berichten zur Codeabdeckung usw.
Wenn Sie weitere Personen hinzufügen, stellt ein Build-Tool sicher, dass Sie nicht für die schlechte IDE-Konfiguration einer anderen Person anfällig sind. Ich mache regelmäßig Screenshares, um die Eclipse-Installationen der Kollegen zu reparieren, da sie keine Build-Tools verwenden (arbeiten daran).
Der ultimative Grund ist jedoch, dass dies nicht manuell erfolgen muss, also nicht manuell. Alles andere fällt davon ab.
quelle