Was ist ein Build-Tool?

130

Seit 4 Jahren programmiere ich mit Eclipse (für Java) und Visual Studio Express (für C #). Die genannten IDEs schienen immer jede Möglichkeit zu bieten, die ein Programmierer sich wünschen könnte (natürlich im Zusammenhang mit der Programmierung).

In letzter Zeit habe ich von etwas gehört, das "Build Tools" genannt wird. Ich habe gehört, dass sie fast in jeder Art von realer Entwicklung eingesetzt werden. Was sind sie genau? Welche Probleme sollen sie lösen? Wieso habe ich sie in den letzten vier Jahren nie gebraucht? Sind sie eine Art Befehlszeilen-IDEs?

Gaurang Agrawal
quelle

Antworten:

117

Was sind Build-Tools?

Build-Tools sind Programme, die die Erstellung ausführbarer Anwendungen aus dem Quellcode automatisieren (z. B. APK für Android App). Das Erstellen umfasst das Kompilieren, Verknüpfen und Verpacken des Codes in eine verwendbare oder ausführbare Form.

Grundsätzlich besteht die Build-Automatisierung aus dem Erstellen von Skripten oder der Automatisierung einer Vielzahl von Aufgaben, die Softwareentwickler bei ihren täglichen Aktivitäten ausführen, z.

  1. Abhängigkeiten herunterladen.
  2. Quellcode in Binärcode kompilieren.
  3. Packen Sie diesen Binärcode.
  4. Ausführen von Tests.
  5. Bereitstellung auf Produktionssystemen.

Warum verwenden wir Build-Tools oder Build-Automatisierung?

In kleinen Projekten rufen Entwickler den Erstellungsprozess häufig manuell auf. Dies ist bei größeren Projekten nicht praktikabel, bei denen es sehr schwierig ist, den Überblick darüber zu behalten, was erstellt werden muss, in welcher Reihenfolge und welche Abhängigkeiten im Bauprozess bestehen. Durch die Verwendung eines Automatisierungstools kann der Erstellungsprozess konsistenter gestaltet werden.

Verschiedene Build-Tools verfügbar (nur wenige benennen):

  1. Für Java - Ant, Maven, Gradle.
  2. Für .NET Framework - NAnt
  3. c # - MsBuild.

Weitere Informationen finden Sie unter folgenden Links:

1. Automatisierung erstellen

2. Liste der Build-Automatisierungssoftware

Vielen Dank.

Ritesh Gune
quelle
17

Build-Tools sind Tools zum Verwalten und Organisieren Ihrer Builds und in Umgebungen mit vielen Projekten sehr wichtig, insbesondere wenn sie miteinander verbunden sind. Sie dienen dazu sicherzustellen, dass dort, wo verschiedene Leute an verschiedenen Projekten arbeiten, nichts kaputt geht. Und um sicherzustellen, dass Ihre Änderungen auch nichts beschädigen.

Der Grund, warum Sie noch nie davon gehört haben, ist, dass Sie zuvor noch nicht in einem kommerziellen Umfeld gearbeitet haben. Es gibt eine Menge Dinge, auf die Sie wahrscheinlich nicht gestoßen sind, die Sie in einer kommerziellen Umgebung finden werden, insbesondere wenn Sie in Softwarehäusern arbeiten.

Wie andere gesagt haben, haben Sie sie verwendet, mussten sie jedoch nicht berücksichtigen, da Sie wahrscheinlich anders als die übliche kommerzielle Arbeitsweise gearbeitet haben.

Schröder Cat
quelle
10

Build-Tools werden normalerweise in der Befehlszeile ausgeführt, entweder innerhalb einer IDE oder vollständig von dieser getrennt.

Die Idee ist, die Arbeit des Kompilierens und Packens Ihres Codes von der Erstellung, dem Debugging usw. zu trennen.

Ein Build-Tool kann auf Befehl oder in einer IDE ausgeführt werden, die beide von Ihnen ausgelöst werden. Sie können auch von Tools für die kontinuierliche Integration verwendet werden, nachdem Sie Ihren Code aus einem Repository auf einen sauberen Build-Computer überprüft haben.

make war ein frühes Befehlstool, das in * nix-Umgebungen zum Erstellen von C / C ++ verwendet wurde.

Als Java-Entwickler sind Ant und Maven die beliebtesten Build-Tools. Beide können in IDEs wie IntelliJ oder Eclipse oder NetBeans ausgeführt werden. Sie können auch von Tools zur kontinuierlichen Integration wie Cruise Control oder Hudson verwendet werden.

Duffymo
quelle
6
Jetzt ist Gradle auch weit verbreitet
Asura
Nicht von wo ich sitze. Gradle war mir nicht bekannt, also danke für den Hinweis.
Duffymo
@duffymo Könnten Sie bitte in der letzten Zeile näher darauf eingehen. Was ist kontinuierliche Integration? Wie hängen sie mit dem Erstellen von Tools zusammen?
Quazi Irfan
4

Build-Tools dienen im Allgemeinen dazu, Quellcode in Binärdateien umzuwandeln - sie organisieren Quellcode, setzen Kompilierungsflags, verwalten Abhängigkeiten ... einige von ihnen lassen sich auch in den laufenden Komponententest integrieren, statische Analysen durchführen und eine Dokumentation erstellen.

Eclipse oder Visual Studio sind ebenfalls Build-Systeme (aber eher eine IDE), und für Visual Studio ist es das zugrunde liegende msbuild, Visual Studio-Projektdateien unter der Haube zu analysieren.

Der Ursprung aller Build-Systeme scheint das berühmte "make" zu sein.

Es gibt Build-Systeme für verschiedene Sprachen:

  1. C ++: make, cmake, premake
  2. Java: Ameise + Efeu, Maven, Gradle
  3. C #: msbuild

Normalerweise erstellen Sie Systeme entweder mit einer domänenspezifischen Sprache (make, cmake) oder mit xml (ant, maven, msbuild), um einen Build anzugeben. Der aktuelle Trend besteht darin, eine echte Skriptsprache zum Schreiben von Build-Skripten zu verwenden, z. B. lua for premake und groovy for gradle. Der Vorteil der Verwendung von Skripten besteht darin, dass sie viel flexibler sind und es Ihnen auch ermöglichen, eine Reihe von Standards zu erstellen APIs (als Build-DSL).

Baiyan Huang
quelle
1

Der Erstellungsprozess ist ein Prozess zum Kompilieren Ihres Quellcodes für Fehler mithilfe einiger Erstellungswerkzeuge und zum Erstellen von Erstellungen (die ausführbare Versionen des Projekts sind). Wir (hauptsächlich Entwickler) nehmen einige Änderungen am Quellcode vor und checken diesen Code ein, damit der Erstellungsprozess stattfinden kann. Nach dem Erstellungsprozess werden zwei Ergebnisse angezeigt: 1. Erstellen Sie entweder PASSES und Sie erhalten eine ausführbare Version Ihres Projekts (Build ist bereit). 2. Es schlägt fehl und Sie erhalten bestimmte Fehler und Build wird nicht erstellt.

Es gibt verschiedene Arten von Erstellungsprozessen wie: 1. Nächtlicher Build 2. Gated Build 3. Kontinuierlicher Integrations-Build usw.

Build-Tools helfen und automatisieren den Prozess der Erstellung von Builds.

* Kurz gesagt, es handelt sich um eine Softwareversion im Pre-Release-Format, die vom Entwickler oder Entwicklungsteam verwendet wird, um Vertrauen in das Endergebnis des Produkts zu gewinnen, indem das Produkt kontinuierlich überwacht und Probleme frühzeitig während des Entwicklungsprozesses gelöst werden. * *

Prakash
quelle
Könnten Sie bitte etwas mehr über die Builds von Nightly, Gated und Continuous Integration erzählen?
Quazi Irfan
@iamcreasy Ich habe eine weitere Antwort in Bezug auf Ihre Frage zur Erklärung der verschiedenen Builds hinzugefügt. Diese Erklärung finden Sie unten. Ich habe auch einige Links hinzugefügt, um Ihnen zu helfen, den Erstellungsprozess besser zu verstehen.
Prakash
1

Dies sind verschiedene Arten von Prozessen, mit denen Sie Ihre Builds fertigstellen können.

1. Continuous Integration Build:In diesem Fall checken hauptsächlich Entwickler ihren Code ein und direkt nach dem Einchecken wird ein Build zum Erstellen der letzten Änderungen initiiert, sodass wir wissen sollten, ob die vom Entwickler vorgenommenen Änderungen direkt nach dem Einchecken funktioniert haben oder nicht. Dies wird für kleinere Projekte oder Komponenten der Projekte bevorzugt. Für den Fall, dass mehrere Teams mit dem Projekt verbunden sind oder eine große Anzahl vorhanden ist. Von Entwicklern, die an demselben Projekt arbeiten, wird dieses Szenario schwierig zu handhaben, als gäbe es 'n' nein. Wenn Check-ins und Builds an bestimmten Punkten fehlschlagen, ist es sehr schwierig zu verfolgen, ob der gesamte Bruch aufgrund eines Problems oder mehrerer Probleme aufgetreten ist. Wenn also die älteren Probleme nicht richtig behoben werden, ist es sehr schwierig, die späteren zu ermitteln Mängel, die nach dieser Änderung aufgetreten sind.

2. Gated Check-In-Builds: Bei dieser Art des Eincheckens wird ein Build direkt nach dem Einchecken initiiert, wobei die Änderungen in einem Regalsatz beibehalten werden. Wenn der Build erfolgreich ist, wird das Einchecken in das Regalset festgeschrieben, andernfalls wird es nicht an den Team Foundation Server festgeschrieben. Dies ergibt ein etwas besseres Bild des kontinuierlichen Integrationsaufbaus, da nur die erfolgreichen Check-ins festgeschrieben werden dürfen.

3. Nächtliche Builds: Dies wird auch als geplante Builds bezeichnet. In diesem Fall planen wir die Ausführung der Builds für eine bestimmte Zeit, um die Änderungen zu erstellen. Alle vorherigen nicht festgeschriebenen Änderungen gegenüber dem letzten Build werden während dieses Buildprozesses erstellt. Dies wird praktiziert, wenn wir mehrmals einchecken möchten, aber nicht jedes Mal einen Build wünschen, wenn wir unseren Code einchecken, damit wir eine feste Zeit oder einen festen Zeitraum haben können, in dem wir den Build für die Erstellung des eingecheckten Codes initiieren können.

Weitere Details zu diesen Builds finden Sie unten.

Gated-Check in Builds

Kontinuierliche Integration wird erstellt

Nächtliche Builds

Prakash
quelle
0

Sie haben sie verwendet - IDE ist ein Build-Tool. Für die Kommandozeile können Sie Dinge wie verwenden make.

Die Leute benutzen Kommandozeilen-Tools für Dinge wie einen nächtlichen Build - also hat der Programmierer am Morgen mit einem Kater festgestellt, dass der Code, mit dem er an den neuesten Builds der Bibliotheken herumgespielt hat, nicht funktioniert!

Ed Heal
quelle
11
Normalerweise ist die IDE kein Build-Tool, sondern integriert sich in / ruft ein Build-Tool auf. Beispielsweise ruft Visual Studio normalerweise MSBuild auf.
Justin
-1

"... es ist sehr schwer zu verfolgen, was gebaut werden muss" - Build-Tools helfen dabei nicht. Sie müssen wissen, was Sie bauen möchten. (Zitiert aus der Antwort von Ritesh Gun)

"Ich habe gehört, dass sie fast in jeder Art von realer Entwicklung eingesetzt werden" - Aus irgendeinem Grund arbeiten Softwareentwickler gerne in großen Unternehmen. Sie scheinen unklarere Arbeitsrichtlinien für jeden Einzelnen zu haben, der dort arbeitet.

"Wieso habe ich sie in den letzten vier Jahren nie gebraucht". Wahrscheinlich, weil Sie ein erfahrener Programmierer sind.

Pseudo, Meta. Ich denke, Build-Tools bieten überhaupt keinen wirklichen Nutzen. Es ist nur dazu da, ein Gefühl der Sicherheit zu schaffen, das sich aus schlechten Unternehmenspraktiken, mangelnder Ausrichtung und einer schlechten Führung der Softwarearchitektur ergibt, die zu schlechten tatsächlichen Kenntnissen des Projekts führt. Sie sollten in Ihrem Projekt niemals Build-Tools (zum Testen) verwenden müssen. Zufällige Tests mit mangelnden Kenntnissen des Softwareprojekts durchzuführen, hilft überhaupt nicht.

Sie sollten einem Projekt niemals etwas hinzufügen, ohne zu wissen, wozu es dient und wie es mit den anderen Komponenten funktioniert. Komponenten können separat funktionieren, aber nicht zusammenarbeiten. (Dies liegt in der Verantwortung des Software-Architekten, den ich übernehme).

Was ist, wenn dem Projekt 4-5 Komponenten hinzugefügt werden? Sie fügen eine 6. Komponente hinzu. Zusammen mit der ersten hinzugefügten Komponente könnte es alles vermasseln. Keine Automatik würde helfen, das zu erkennen.

Es gibt keine andere Abkürzung als zu denken, zu denken, zu denken.

Dann gibt es den automatischen Download aus Repositories. Warum sollten Sie das jemals tun wollen? Sie müssen wissen, was Sie herunterladen und was Sie dem Projekt hinzufügen. Wie erkennen Sie Änderungen in Versionen der Repositorys? Du musst wissen. Sie können nichts "automatisch".

Was wäre, wenn wir Fahrräder und Babytransporter mit verbundenen Augen und einem Stock testen und zufällig damit herumschlagen würden? Das scheint die Idee zu sein, Tools zu testen.

Es tut mir leid, dass es keine Verknüpfung https://en.wikipedia.org/wiki/Scientific_method und https://en.wikipedia.org/wiki/Analysis gibt

Lealo
quelle
Ihre Antwort ist aus C-Sicht unglaublich voreingenommen, wo dies ein massives Problem ist. Build-Tools sind für alles Komplexere als das Ausführen eines Compilers unerlässlich (selbst dann ist gcc ein massives B-Wort), und das Abhängigkeitsmanagement mit strengen Abhängigkeitsdeklarationen ist ein Glücksfall. Nur weil Sie es nicht verwenden, heißt das nicht, dass dies schlechte Konzepte sind. Wenn Sie einfach Bash-Skripte verwenden, um Dinge zu erstellen, ist dies auch ein Build-Tool - nur kein sehr gutes. Wenn Sie von Hand oder ausschließlich über ide kompilieren, kann Gott für komplexe, wiederholbare Builds über verschiedene Systeme hinweg bei Ihnen sein.
RecursiveExceptionException