Skip to content

Commit

Permalink
Add Docu for Maven and SLF4J (#238)
Browse files Browse the repository at this point in the history
* Add Docu for Maven and SLF4J

* Add Mockito Dependency

* Add Mockito

* Update Mockito Page
  • Loading branch information
appenmaier authored Dec 18, 2024
1 parent 877a2ce commit 39d4979
Show file tree
Hide file tree
Showing 5 changed files with 546 additions and 37 deletions.
28 changes: 23 additions & 5 deletions docs/documentation/lombok.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,31 @@ tags: [lombok]
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';

[Lombok](https://projectlombok.org/) stellt eine Java-Bibliothek dar, die das
Erstellen von Boilerplate-Code überflüssig macht. Repetitive Methoden wie
Konstruktoren, Getter, Setter und die Objekt-Methoden müssen nicht manuell
implementiwert werden, sondern werden beim Kompilieren generiert. Durch
entsprechende Annotationen kann dabei gesteuert werden, welche Methoden wie
[Lombok](https://projectlombok.org/) stellt eine externe Java-Bibliothek dar,
die das Erstellen von Boilerplate-Code überflüssig macht. Repetitive Methoden
wie Konstruktoren, Getter, Setter und die Objekt-Methoden müssen nicht manuell
implementiert werden, sondern werden beim Kompilieren generiert.

## Annotationen

Durch entsprechende Annotationen kann gesteuert werden, welche Methoden wie
generiert werden sollen.

| Annotation | Beschreibung |
| -------------------------- | -------------------------------------------------------------------------------------------------- |
| `@RequiredArgsConstructor` | Generiert einen Konstruktor mit Parametern zu allen unveränderlichen Attributen |
| `@AllArgsConstructor` | Generiert einen Konstruktor mit Parametern zu allen Attributen |
| `@Getter` | Generiert Get-Methoden zu allen Attributen |
| `@Setter` | Generiert Set-Methoden zu allen veränderlichen Attributen |
| `@EqualsAndHashCode` | Generiert Implementierungen für die Methoden `boolean equals(object: Object)` und `int hashCode()` |
| `@ToString` | Generiert eine Implementierung für die Methode `String toString()` |
| `@Data` | `@RequiredArgsConstructor` + `@Getter` + `@Setter` + `@EqualsAndHashCode` + `@ToString` |

## Beispiel

Für die Klasse `Student` werden mit Hilfe von Lombok-Annotationen Konstruktoren,
Setter und Getter sowie die Object-Methoden generiert.

<Tabs>
<TabItem value="a" label="Fachklasse" default>

Expand Down
252 changes: 252 additions & 0 deletions docs/documentation/maven.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,252 @@
---
title: Maven
description: ''
sidebar_position: 252
tags: [maven]
---

import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem';

[Apache Maven (kurz Maven)](https://maven.apache.org/) ist ein sogenanntes
Build-Automatisierungstool, welches hauptsächlich für Java-Projekte verwendet
wird. Es hilft Entwicklern, den Build-Prozess eines Programmes zu vereinfachen
und zu standardisieren. Maven verwendet hierzu eine Konfigurationsdatei namens
_pom.xml_ (Project Object Model).

## Merkmale

- Automatisierung des Build-Prozesses: Maven automatisiert den Build-Prozess
(Kompilieren, Testen, Verpacken und Bereitstellen)
- Abhängigkeitsmanagement: Maven verwaltet Projekt-Abhängigkeiten wie externe
Bibliotheken und Frameworks automatisch
- Standardisierte Projektstruktur: Maven fördert eine standardisierte
Projektstruktur, die es einfacher macht, Projekte zu verstehen und zu
navigieren
- Plugins: Maven unterstützt eine Vielzahl von Plugins, die zusätzliche
Funktionalitäten bieten (z.B. Code-Analyse, Berichterstellung und
Dokumentation)
- Lebenszyklus-Management: Maven definiert einen standardisierten Lebenszyklus
für den Build-Prozess

## Die Konfigurationsdatei _pom.xml_

Die Konfigurationsdatei _pom.xml_ umfasst neben allen relevanten
Projekt-Eigenschaften auch sämtliche Abhängigkeiten sowie Plugins, die dadurch
automatisch von Maven verwaltet werden.

```xml title="pom.xml" showLineNumbers
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>edu.jappuccini</groupId>
<artifactId>demo</artifactId>
<version>1.0.0-SNAPSHOT</version>

<!-- Eigenschaften -->
<properties>
<!-- Java-Version -->
<maven.compiler.source>21</maven.compiler.source>
<maven.compiler.target>21</maven.compiler.target>
<!-- Encoding -->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
</properties>

<!-- Build Prozess -->
<build>
<!-- Plugins -->
<plugins>
<!-- Prettier -->
<plugin>
<groupId>com.hubspot.maven.plugins</groupId>
<artifactId>prettier-maven-plugin</artifactId>
<version>0.16</version>
<executions>
<execution>
<id>default-compile</id>
<phase>compile</phase>
<goals>
<goal>write</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>

<!-- Abhängigkeiten -->
<dependencies>
<!-- JUnit 5 -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.11.3</version>
<scope>test</scope>
</dependency>
</dependencies>

</project>
```

## Lebenszyklus-Phasen

Maven kennt die drei Lebenszyklen `clean` zum Löschen aller Artefakte
vergangener Builds, `default` zum Erstellen des Projekts sowie `site` zum
Erstellen einer Dokumentationsseite. Jeder Lebenszyklus durchläuft hierbei
verschiedene Phasen. Durch Plugins können diese um zusätzliche
Verarbeitungsschritte erweitert werden. Nachfolgend dargestellt sind die
wesentlichen Phasen des Default Lebenszyklus:

| Phase | Beschreibung |
| ---------- | ------------------------------------------------------------------------------------ |
| `validate` | Prüfen, ob die POM sowie die Projektstruktur vollständig, fehlerfrei und gültig sind |
| `compile` | Kompilieren des Quellcodes |
| `test` | Ausführen der Komponententests |
| `package` | Verpacken des Projekts in z.B. ein Java Archiv (JAR) |
| `verify` | Ausführen von bereitgestellten Integrationstests |
| `install` | Kopieren des Archivs ins lokale Maven-Repository |
| `deploy` | Kopieren des Archivs in ein remote Maven-Repository |

## Hilfreiche Plugins und Bibliotheken

<Tabs>
<TabItem value="a" label="Prettier" default>

[Prettier](https://prettier.io/) ist ein weit verbreiterter
Quellcode-Formatierer, der eine einheitliche Quellcode-Formatierung fördert.
Durch die Einbindung des Goals `write` in die Lebenszyklus-Phase `compile` wird
sichergestellt, dass der Quellcode bei jedem Kompiliervorgang automatisch
formattiert wird.

```xml title="pom.xml (Auszug)" showLineNumbers
...
<!-- Prettier -->
<plugin>
<groupId>com.hubspot.maven.plugins</groupId>
<artifactId>prettier-maven-plugin</artifactId>
<version>0.16</version>
<executions>
<execution>
<id>default-compile</id>
<phase>compile</phase>
<goals>
<goal>write</goal>
</goals>
</execution>
</executions>
</plugin>
...
```

</TabItem>
<TabItem value="b" label="Checkstyle">

[Checkstyle](https://maven.apache.org/plugins/maven-checkstyle-plugin/) ist ein
Tool zur Berichtserstellung über die Einhaltung von Codingstandards und gibt dem
Entwickler dadurch wertvolle Hinweise zur Verbesserung der Softwarequalität. Das
Goal `check` führt eine Prüfung des Quellcodes aus und gibt der Ergebnisse auf
der Konsole aus, das Goal `checkstyle` erstellt aufbauend auf den Prüfungen eine
Berichtsseite.

```xml title="pom.xml (Auszug)" showLineNumbers
...
<!-- Checkstyle -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
<version>3.6.0</version>
</plugin>
...
```

</TabItem>
<TabItem value="c" label="Lombok">

Lombok ist eine beliebte Bibliothek zur Generierung von repetitiven Methoden
(siehe auch [Lombok](lombok)).

```xml title="pom.xml (Auszug)" showLineNumbers
...
<!-- Lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.36</version>
</dependency>
...
```

</TabItem>
<TabItem value="d" label="SLF4J und Log4J">

Simple Logging Facade for Java (SLF4J) ist eine beliebte
Java-Protokollierungs-API, die es ermöglicht, den Quellcode um Protokolle zu
erweitern, die anschließend an ein gewünschtes Protokoll-Framework (wie z.B.
Log4J) weitergeleitet werden (siehe auch
[Simple Logging Facade for Java (SLF4J)](slf4j)).

```xml title="pom.xml (Auszug)" showLineNumbers
...
<!-- SLF4J-API -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>2.0.16</version>
</dependency>
<!-- SLF4J-Implementierung -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-reload4j</artifactId>
<version>2.0.16</version>
</dependency>
...
```

</TabItem>
<TabItem value="e" label="JUnit 5">

JUnit 5 ist ein weit verbreitetes Framework zur Erstellung von Komponententests
(siehe auch [Komponententests (Unit Tests)](unit-tests)).

```xml title="pom.xml (Auszug)" showLineNumbers
...
<!-- JUnit 5 -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.11.3</version>
<scope>test</scope>
</dependency>
...
```

</TabItem>
<TabItem value="f" label="Mockito">

Mockito ist ein beliebtes Framework für das Erstellen von Mock-Objekten in Java,
das hauptsächlich für das Testen von Anwendungen verwendet wird (siehe auch
[Mockito](mockito)).

```xml title="pom.xml (Auszug)" showLineNumbers
...
<!-- Mockito -->
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>5.14.2</version>
<scope>test</scope>
</dependency>
...
```

</TabItem>
</Tabs>

:::danger Hinweis

Die angegebenen Versionen sind die jeweils aktuellsten Versionen zum Stand
Dezember 2024.

:::
Loading

0 comments on commit 39d4979

Please sign in to comment.