This repository has been archived by the owner on Jun 27, 2021. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathgradle.tex
55 lines (48 loc) · 4.17 KB
/
gradle.tex
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
\section{Gradle}
\begin{figure}[h]
\begin{center}
\includegraphics{./fig/gradle_logo.png}
\caption{Das Gradle Logo}
\label{fig:gradle_logo}
\end{center}
\end{figure}
Gradle ist ein Build-Management-Tool, welches auf Java basiert und mit Ant und Maven von Apache vergleichbar ist. Es wurde f"ur Builds von Sofwaresystemen entwickelt, welche aus vielen Projekten bestehen.
F"ur die Beschreibung der zu bauenden Projekte wird dabei eine auf Groovy basierende DSL (\textit{domain specific language}) verwendet.
Ein Gradle-Skript ist direkt ausf"uhrbarer Code und stellt immer ein Groovy-Skript dar.
Bei Gradle wurde versucht, das \textit{``build-by-convention''}-Prinzip von Maven und die Flexibilit"at von Ant zu vereinen.
Gradle ist mit der Apache-Lizenz 2.0 lizensiert.
Da die Builds rie"siger Projekte sehr viel Zeit in Anspruch nehmen, erlaubt Gradle inkrementelles, sowie auch paralleles Bauen der Software.
Inkrementelles Bauen bedeutet dabei, dass immer nur ge"anderte Teile des Projektes neu gebaut werden, paralleles Bauen, dass zum Beispiel Tests parallel auf verschiedenen CPU's ausgef"uhrt werden.
Der Build-Prozess kann somit wesentlich schneller ablaufen.
Gradle bietet auch Plug-ins f"ur IDE's wie zum Beispiel f"ur NetBeans, IntelliJ IDEA und Eclipse.
\subsection{Konzept und Architektur}
Gradle "ubernimmt in vielen hinsichten die Konzepte von Maven. Diese w"aren:
\begin{itemize}
\item Die Standartkonventionen f"ur das Verzeichnislayout der Projektquelle
\item Die Phasen f"ur den Bau eines Projekts (Validieren, Kompilieren, Testausführung, Archive-erstellen und Report-Generierung erstellen, Verteilung)
\item Das Management der Abh"angigkeiten eines Projekts mit anderen Projekten oder Fremdbibliotheken
\end{itemize}
Ebenso "ahnelt die Architektur von Gradle der von Maven.
Es besteht aus einem abstrakten Kern und einer Vielzahl an Plug-ins. Gradle ist damit vielf"altig erweiterbar und erm"oglicht das Bewerkstelligen von Buildproze"sen f"ur beliebige Software-Platformen.
Dabei werden von Haus aus die Plug-ins f"ur das Bauen von Java, Groovy, Scala und C++ Projekten mitgeliefert.
\subsection{Gradle DSL}
Zum Unterschied von Maven und de"sen XML-Deklarationen arbeitet der Anwender mit Gradles Dom"anenspezifischer Sprache, welche er erweitern oder in den Standardeigenschaften "andern kann, da eine Gradle-Build-Datei immer ein Groovy-Skript darstellt.
Ebenso ist es m"oglich eigene Build-"anderungen zu schreiben oder vordefinierte Standards zu "uberschreiben und dem eigenen Belangen anzupa"sen.
Der Gradle-Anwender kann dabei zwei Stile verwenden:
\begin{itemize}
\item Deklarativ: auf Standardkonventionen beruhender Ansatz von Maven
\item Imperativ: Ansatz von Ant, bei dem der Anwender aber auch alles im Detail definieren muss
\end{itemize}
Auf Grund der DSL ist man nicht gezwungen, zuerst Groovy zu lernen, bevor man mit Gradle-Build-Skripten arbeitet.
\subsection{Der Gradle-Build}
Der Gradle-Build ist in zwei Hauptphasen aufgeteilt, in die Konfiguration und die Ausf"uhrung.
In der Konfiguration wird die gesamt Build-Definition durchlaufen und ein sogenannter Abh"angigkeitsgraph (DAG) erstellt.
Dieser DAG enth"alt die Reihenfolge aller abzuarbeitenden Schritte. Bei der Ausf"uhrung wird dieser Graph f"ur die gew"unschten Tasks dann durchlaufen.
Beide Teile sind "uber eine offene API zug"anglich.
Die Tasks des Buildprozess, welcher vom DAG beschrieben wird, h"angen hierachisch voneineander ab. Das hei"st ein Task kann nur ausgef"uhrt werden, wenn alle seine Vorg"anger erfolgreich abgeschlossen wurden.
Gradle nutzt f"ur einen einfachen Build haupts"achlich drei benutzerdefinierte Dateien:
\begin{itemize}
\item \textit{build.gradle} : die auf der Gradle-DSL beruhende Definition des Builds mit allen Tasks und Abh"angigkeiten eines Projekts (ein Multiprojekt hat pro Projekt eine solche Build-Datei, die durch Vererbung der Eigenschaften von ihrem ``Vater''-Buildskript kurz gehalten werden k"onnen)
\item \textit{settings.gradle (optional)} : bei einem Multiprojekt werden hier die teilnehmenden Unterprojekte festgelegt
\item \textit{gradle.properties (optional)} : eine Liste von Properties, die f"ur die projektspezifische Gradle-Initialisierung eines Builds g"ultig sind
\end{itemize}