RU | EN | DE

1. Maven

📂 Projektstruktur (Standard Directory Layout) mavenstructure.jpeg

📄 Minimales pom.xml

<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
                                 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.example</groupId>
    <artifactId>demo</artifactId>
    <version>1.0.0</version>
    <packaging>jar</packaging>
    <properties>
        <java.version>17</java.version>
        <spring.boot.version>3.2.0</spring.boot.version>
    </properties>
    <dependencies>
        <!-- Starter Web (Spring MVC, Tomcat, Jackson) -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- JUnit 5 + Mockito -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <!-- Spring Boot starten über mvn spring-boot:run -->
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

🔧 Hauptbefehle Maven

mvn clean          # Bereinigen von target/
mvn compile         # Kompilieren von Java
mvn validate       # Überprüft die Projektstruktur und das Vorhandensein aller benötigten Dateien
mvn test            # Ausführen von Tests
mvn test-compile   # Kompiliert Testcode (src/test/java)
mvn package         # Baut jar/war in target/
mvn install         # Installiert Artefakte im lokalen Repository (~/.m2)
mvn deploy          # Sendet Artefakte in ein Remote-Repository
                   # (Nexus, Artifactory)
mvn site            # Generiert die Projekt-Website
mvn verify          # Führt Integrationstests und Code-Qualitätsprüfungen durch
mvn dependency:tree # Abhängigkeitsbaum (sehr nützlich!)
mvn dependency:list # Liste aller Projektabhängigkeiten
mvn dependency:analyze # Zeigt ungenutzte und nicht deklarierte Abhängigkeiten
mvn help:effective-pom # Zeigt den finalen POM mit Berücksichtigung von Vererbung und Profilen
 
mvn versions:display-dependency-updates # Zeigt verfügbare neue Versionen
                                        # der Abhängigkeiten
mvn archetype:generate # Erstellt ein neues Projekt aus einer Vorlage (Archetype)
 
###############
# Spring Boot #
###############
mvn spring-boot:run       # Startet die Spring Boot Anwendung
mvn clean spring-boot:run  # Bereinigt zuerst target, dann startet.
 
mvn package spring-boot:repackage # Packt und "repackt" JAR/WAR  # in ein ausführbares fat/uber JAR mit eingebautem
                                    # Launcher.
mvn spring-boot:repackage  # Nur "repacken", wenn package bereits
                                    # erstellt wurde.
mvn spring-boot:build-image  # Baut ein **OCI-Image** Container über
                                  # Cloud Native Buildpacks (Paketo), ohne
                                  # Dockerfile.
mvn spring-boot:start       # Startet die Anwendung im Hintergrund für
                                  # Integrationstests
mvn spring-boot:stop        # Stoppt die Anwendung, die von start gestartet wurde.
mvn spring-boot:build-info  # Generiert META-INF/build-info.properties
                                 # (Version, Build-Zeit usw.) für
                                 # /actuator/info.
mvn spring-boot:process-aot  # AOT-Vorbereitung des Codes (Boot 3.x): generiert
                                 # Hilfsklassen zur Beschleunigung
                                 # des Starts/Minimierung der Reflexion.
mvn spring-boot:process-test-aot # AOT für Tests.
mvn spring-boot:help -Ddetail=true # Hilfe zu den Plugin-Zielen und ihren Parametern.
 
###############
# SONAR  #
###############
mvn clean verify sonar:sonar -Dsonar.projectKey=clavionx-web -Dsonar.projectName='Сlavionx' -Dsonar.host.url=http://localhost:9000 -Dsonar.token=sqp_3606ea94664b701db82c3a1b3c0ad9b8a0ffecfc
mvn clean verify sonar:sonar -Psonar
 
**📄 Spring Profile in Gradle**
In application.properties/application.yml werden Profile angegeben:
```Powershell
spring.profiles.active=dev

Starten mit einem Profil:

gradle bootRun --args='--spring.profiles.active=prod'

📌 Nützliche Gradle Plugins

plugins {
    id 'checkstyle' // Code-Stil
    id 'jacoco'   // Testabdeckung
}

3. Unterschiede Maven vs Gradle

🛠️ CharakteristikMaven (pom.xml)Gradle (build.gradle)
KonfigurationsspracheXML (starr)Groovy/Kotlin DSL (flexibel)
LernkurveNiedrigHöher (DSL muss bekannt sein)
GeschwindigkeitLangsamerSchneller (Caching, Parallelität)
AnpassbarkeitBegrenztSehr flexibel
PopularitätDominiertWächst schnell
Wo häufiger verwendetSpring Boot Projekte, Banken, BehördenMicroservices, DevOps-intensive Projekte

4. Best Practices

  • ✅ Verwende Spring Boot Starter Pakete (sie ersparen das manuelle Auswählen von Abhängigkeiten).
  • ✅ Erstelle Profile dev/test/prod → für Konfigurationen, Logging, Datenbanken.
  • ✅ In großen Projekten: Gradle (beschleunigt CI/CD).
  • ✅ Für Bewerbungen und erste Projekte: Maven (einfacher und mehr Dokumentation).
  • ✅ Überprüfe den Abhängigkeitsbaum (mvn dependency:tree, gradle dependencies) – das verhindert Konflikte.

📌 Fazit

  • Maven = Standard, Einfachheit, ausgezeichnete Dokumentation.
  • Gradle = Flexibilität, Geschwindigkeit, die richtige Wahl für moderne Microservices.
  • Beide werden von Spring Boot gleich unterstützt. Zum Einstieg → lerne Maven. Wenn du dich daran gewöhnt hast → ziehe Gradle nach.