Eine kuratierte Sammlung essentieller Tools für moderne Java-Entwicklung – von den Experten bei Java Fleet Systems Consulting

Seiteninhalt
- 1 🔍 Security & Vulnerability Scanning
- 2 🏛️ Legacy Code & Migration
- 3 🔧 Build & Dependency Management
- 4 🧪 Testing & Quality Assurance
- 5 📊 Monitoring & Performance
- 6 🚀 Development & IDE Tools
- 7 🛠️ Utility Libraries
- 8 📚 Zusammenfassung & Quick-Start
- 8.1 Essential-Tools für jeden Java-Entwickler:
- 8.2 Installation-Checkliste:
- 8.3 Team-Setup-Empfehlung:
- 8.4 🔥 Advanced Tools für Spezialisten
- 8.5 JProfiler
- 8.6 GCEasy
- 8.7 JHipster
- 8.8 OpenAPI Generator
- 8.9 Flyway
- 8.10 Liquibase
- 8.11 SpringDoc OpenAPI
- 8.12 AsciiDoctor
- 8.13 Jib
- 8.14 Fabric8 Docker Maven Plugin
- 8.15 Cosign
- 8.16 Snyk
- 8.17 Testcontainers – Kafka Module
- 8.18 Embedded Kafka (Spring)
- 8.19 Jackson
- 8.20 JSON Path
- 8.21 Spring Boot Configuration Processor
- 8.22 Owner (Configuration Library)
- 8.23 OkHttp
- 8.24 Feign
- 8.25 Caffeine
- 8.26 Redis (Jedis/Lettuce)
- 8.27 📋 Tool-Matrix: Wann welches Tool?
- 8.28 🚀 Windows-Installationsleitfaden für Java-Tools
🎯 Überblick
Diese Seite sammelt die wichtigsten Tools und Libraries, die in der Java-Entwicklung regelmäßig benötigt werden. Jedes Tool wird mit Charakterisierung, Beschreibung, Download/Installation und praktischer Verwendung erklärt.
📚 Wichtige Abkürzungen & Begriffe
Security & Vulnerability
- CVE = Common Vulnerabilities and Exposures (öffentlich dokumentierte Sicherheitslücken)
- SBOM = Software Bill of Materials (Stückliste aller Software-Komponenten)
- OWASP = Open Web Application Security Project (Non-Profit für Web-Security)
- CVSS = Common Vulnerability Scoring System (Bewertungssystem für Schwachstellen, 0-10)
Development & Testing
- API = Application Programming Interface (Schnittstelle zwischen Software-Komponenten)
- REST = Representational State Transfer (Architekturstil für Web-APIs)
- JSON = JavaScript Object Notation (Datenformat für API-Kommunikation)
- XML = eXtensible Markup Language (strukturiertes Datenformat)
- YAML = YAML Ain’t Markup Language (menschenlesbares Datenformat)
- IDE = Integrated Development Environment (Entwicklungsumgebung)
- CLI = Command Line Interface (Kommandozeilen-Schnittstelle)
- CI/CD = Continuous Integration/Continuous Deployment (automatisierte Build-Pipeline)
- TDD = Test-Driven Development (testgetriebene Entwicklung)
- BDD = Behavior-Driven Development (verhaltensgetriebene Entwicklung)
Architecture & Patterns
- JVM = Java Virtual Machine (Laufzeitumgebung für Java)
- JDK = Java Development Kit (Entwicklungskit mit Compiler, Tools, etc.)
- JRE = Java Runtime Environment (Laufzeitumgebung ohne Entwicklungstools)
- JAR = Java ARchive (gepackte Java-Anwendung)
- WAR = Web Application Archive (gepackte Web-Anwendung)
- ORM = Object-Relational Mapping (Objektrelationale Abbildung für Datenbanken)
- MVC = Model-View-Controller (Architekturmuster für UI-Anwendungen)
- DI = Dependency Injection (Entwurfsmuster für lose Kopplung)
- AOP = Aspect-Oriented Programming (aspektorientierte Programmierung)
Data & Persistence
- JDBC = Java Database Connectivity (Standard-API für Datenbankzugriff)
- JPA = Java Persistence API (Standard für ORM in Java)
- SQL = Structured Query Language (Datenbankabfragesprache)
- NoSQL = Not Only SQL (nicht-relationale Datenbanken)
- CRUD = Create, Read, Update, Delete (Grundoperationen für Daten)
Web & Networking
- HTTP = HyperText Transfer Protocol (Web-Übertragungsprotokoll)
- HTTPS = HTTP Secure (verschlüsselte Variante von HTTP)
- SSL/TLS = Secure Sockets Layer/Transport Layer Security (Verschlüsselungsprotokolle)
- JWT = JSON Web Token (Standard für sichere Datenübertragung)
- CORS = Cross-Origin Resource Sharing (Browser-Sicherheitsfeature)
- URL = Uniform Resource Locator (Webadresse)
- URI = Uniform Resource Identifier (eindeutige Ressourcenkennung)
Build & Deployment
- Maven = Build-Automation-Tool für Java (Project Object Model – POM)
- Gradle = Build-Automation-Tool (Groovy/Kotlin-basiert)
- Docker = Container-Virtualisierungsplattform
- K8s = Kubernetes (Container-Orchestrierungsplattform)
- VM = Virtual Machine (virtuelle Maschine)
Performance & Monitoring
- GC = Garbage Collection (automatische Speicherverwaltung in Java)
- JMX = Java Management Extensions (Monitoring- und Management-API)
- APM = Application Performance Monitoring (Anwendungsleistungsüberwachung)
- SLA = Service Level Agreement (Dienstgütevereinbarung)
- SLO = Service Level Objective (Dienstgüteziel)
Standards & Specifications
- JSR = Java Specification Request (Java-Standardisierungsprozess)
- RFC = Request for Comments (Internet-Standards)
- W3C = World Wide Web Consortium (Web-Standards-Organisation)
- ISO = International Organization for Standardization (Internationale Normungsorganisation)
Kategorien:
- 🔍 Security & Vulnerability Scanning
- 🏛️ Legacy Code & Migration
- 🔧 Build & Dependency Management
- 🧪 Testing & Quality Assurance
- 📊 Monitoring & Performance
- 🚀 Development & IDE Tools
🔍 Security & Vulnerability Scanning
Trivy
Charakterisierung: Container- und Dependency-Vulnerability-Scanner
Typ: Security-Tool, Open Source
Beschreibung:
Trivy scannt Container-Images, Dateisysteme und Git-Repositories nach bekannten CVE (Common Vulnerabilities and Exposures) – das sind öffentlich dokumentierte Sicherheitslücken mit eindeutiger ID. Unterstützt Java, Python, Node.js, Go und viele weitere Sprachen. Bewertet Schwachstellen nach CVSS (Common Vulnerability Scoring System) von 0-10.
Download & Installation:
# macOS (Homebrew) brew install trivy # Linux (apt - Ubuntu/Debian) sudo apt-get install wget apt-transport-https gnupg lsb-release wget -qO - https://aquasecurity.github.io/trivy-repo/deb/public.key | gpg --dearmor | sudo tee /usr/share/keyrings/trivy.gpg > /dev/null echo "deb [signed-by=/usr/share/keyrings/trivy.gpg] https://aquasecurity.github.io/trivy-repo/deb generic main" | sudo tee -a /etc/apt/sources.list.d/trivy.list sudo apt-get update sudo apt-get install trivy # Windows (Chocolatey) choco install trivy # Windows (Manual Download) # Download trivy_x.xx.x_windows-64bit.zip from GitHub Releases # Unzip und trivy.exe in PATH-Verzeichnis kopieren # Windows (Scoop) scoop install trivy # Docker (alle Plattformen) docker run --rm -v /var/run/docker.sock:/var/run/docker.sock aquasec/trivy:latest
Offizielle Website: https://trivy.dev/ GitHub Releases: https://github.com/aquasecurity/trivy/releases
Praktische Verwendung:
# Java-Projekt scannen trivy fs . # Container-Image scannen trivy image myapp:latest # Nur High/Critical Vulnerabilities trivy image --severity HIGH,CRITICAL myapp:latest # JSON-Report generieren trivy image --format json --output result.json myapp:latest # CI/CD: Exit-Code bei Critical Findings trivy image --exit-code 1 --severity CRITICAL myapp:latest
Warum wichtig: Automatische Erkennung von Sicherheitslücken in Dependencies und Container-Images.
Syft
Charakterisierung: SBOM (Software Bill of Materials) Generator
Typ: Security-Tool, Open Source von Anchore
SBOM = Software Bill of Materials
Beschreibung:
Syft analysiert Container-Images und Projekte und erstellt eine vollständige SBOM – eine „Stückliste“ aller Software-Komponenten, Dependencies und Libraries. Dies ist die Basis für Vulnerability-Management und Compliance-Anforderungen. Unterstützt Standards wie SPDX und CycloneDX.
Download & Installation:
# macOS (Homebrew) brew install syft # Linux (Curl) curl -sSfL https://raw.githubusercontent.com/anchore/syft/main/install.sh | sh -s -- -b /usr/local/bin # Windows (Chocolatey) choco install syft # Windows (Scoop) scoop install syft # Windows (Manual Download) # Download syft_x.xx.x_windows_amd64.zip from GitHub Releases # Unzip und syft.exe in PATH-Verzeichnis kopieren # Python (alle Plattformen) pip install anchore-syft # Go Install (alle Plattformen) go install github.com/anchore/syft/cmd/syft@latest
Offizielle Website: https://github.com/anchore/syft GitHub Releases: https://github.com/anchore/syft/releases
Praktische Verwendung:
# SBOM für Java-Projekt erstellen syft . # Container-Image analysieren syft myapp:latest # JSON-Format (Standard) syft myapp:latest -o cyclonedx-json > sbom.json # SPDX-Format (für Compliance) syft myapp:latest -o spdx-json > sbom-spdx.json # Nur Java-Dependencies syft . -o table --select-catalogers java-archive
Warum wichtig: Transparenz über alle verwendeten Komponenten, Grundlage für Security-Scans und Compliance.
OWASP Dependency-Check
Charakterisierung: Maven/Gradle Plugin für Dependency-Vulnerability-Scanning
Typ: Security-Plugin, OWASP Project
OWASP = Open Web Application Security Project
Beschreibung:
OWASP ist eine Non-Profit-Organisation, die sich der Verbesserung der Software-Sicherheit widmet. Das OWASP Top 10 ist die bekannteste Liste der kritischsten Web-Anwendungs-Sicherheitsrisiken.
Das OWASP Dependency-Check Plugin analysiert Projekt-Dependencies auf bekannte Schwachstellen aus der CVE-Datenbank (Common Vulnerabilities and Exposures). Integriert sich nahtlos in Maven/Gradle-Builds.
Download & Installation:
Maven (pom.xml
):
<plugin> <groupId>org.owasp</groupId> <artifactId>dependency-check-maven</artifactId> <version>8.4.0</version> <configuration> <failBuildOnCVSS>7</failBuildOnCVSS> </configuration> </plugin>
Gradle (build.gradle
):
plugins { id 'org.owasp.dependencycheck' version '8.4.0' } dependencyCheck { failBuildOnCVSS = 7 }
Offizielle Website: https://owasp.org/www-project-dependency-check/
Praktische Verwendung:
# Maven mvn org.owasp:dependency-check-maven:check # Gradle ./gradlew dependencyCheckAnalyze # Report in target/dependency-check-report.html
Warum wichtig: Automatische Integration in Build-Pipeline, findet vulnerable Dependencies vor Production-Deployment.
🏛️ Legacy Code & Migration
jdeps
Charakterisierung: JDK-Tool für Dependency-Analyse
Typ: Built-in JDK-Tool
JDK = Java Development Kit
Beschreibung:
Analysiert Java-Bytecode und zeigt Abhängigkeiten zwischen Packages, Classes und JDK-Modulen. Essential für JDK-Migrationen (z.B. von Java 8 → 11 → 17). Findet problematische Internal APIs, die in neueren JDK-Versionen entfernt wurden.
Download & Installation:
Im JDK enthalten (seit JDK 8) – funktioniert auf Windows, Linux, macOS.
# Verfügbarkeit prüfen (alle Plattformen) jdeps --version # Windows (PowerShell/CMD) jdeps --jdk-internals target\classes\ # Linux/macOS (Bash) jdeps --jdk-internals target/classes/
Praktische Verwendung:
# JDK-Internal-APIs finden (wichtig für JDK 9+ Migration) jdeps --jdk-internals target/classes/ # Alle Dependencies anzeigen jdeps -verbose target/classes/ # Module-Dependencies (JDK 9+) jdeps --module-path target/dependency target/classes/ # Summary-Report jdeps --summary target/classes/
Warum wichtig: Unverzichtbar für JDK-Migrationen, findet problematische Dependencies vor Breaking Changes.
ArchUnit
Charakterisierung: Java-Architecture-Testing-Framework
Typ: Testing-Library
Beschreibung:
Ermöglicht automatisierte Tests der Code-Architektur. Perfekt für Legacy-Refactoring und Architectural Governance.
Download & Installation:
Maven:
<dependency> <groupId>com.tngtech.archunit</groupId> <artifactId>archunit-junit5</artifactId> <version>1.2.1</version> <scope>test</scope> </dependency>
Offizielle Website: https://www.archunit.org/
Praktische Verwendung:
@Test void layeredArchitecture() { layeredArchitecture() .layer("Controller").definedBy("..controller..") .layer("Service").definedBy("..service..") .layer("Repository").definedBy("..repository..") .whereLayer("Controller").mayNotBeAccessedByAnyLayer() .whereLayer("Service").mayOnlyBeAccessedByLayers("Controller") .whereLayer("Repository").mayOnlyBeAccessedByLayers("Service"); } @Test void noCyclesInPackages() { slices().matching("com.company.(*)..").should().beFreeOfCycles(); }
Warum wichtig: Verhindert Architectural Drift, macht Code-Regeln testbar.
Characterization Testing Tools
ApprovalTests
Charakterisierung: Golden Master Testing Framework
Typ: Testing-Library
Beschreibung:
Vereinfacht Characterization Testing durch automatische „Golden Master“ Comparison.
Maven:
<dependency> <groupId>com.approvaltests</groupId> <artifactId>approvaltests</artifactId> <version>22.2.0</version> <scope>test</scope> </dependency>
Offizielle Website: https://approvaltests.com/
Verwendung:
@Test void characterizeLegacyMethod() { LegacyClass legacy = new LegacyClass(); String result = legacy.complexMethod(input); Approvals.verify(result); }
Warum wichtig: Macht Legacy-Code-Testing einfach und sicher.
🔧 Build & Dependency Management
Maven Wrapper
Charakterisierung: Build-Tool-Versionierung
Typ: Build-Wrapper
Beschreibung:
Stellt sicher, dass alle Entwickler die gleiche Maven-Version verwenden.
Installation:
# In bestehendem Maven-Projekt (alle Plattformen) mvn wrapper:wrapper # Mit spezifischer Version mvn wrapper:wrapper -Dmaven=3.9.4
Verwendung:
# Linux/macOS ./mvnw clean install # Windows (PowerShell/CMD) mvnw.cmd clean install # oder in PowerShell .\mvnw.cmd clean install
Warum wichtig: Konsistente Builds unabhängig von lokaler Maven-Installation.
Gradle Wrapper
Charakterisierung: Build-Tool-Versionierung für Gradle
Typ: Build-Wrapper
Beschreibung:
Gradle-Pendant zum Maven Wrapper.
Verwendung:
# Linux/macOS ./gradlew build ./gradlew test # Windows (PowerShell/CMD) gradlew.bat build gradlew.bat test # PowerShell (alternative Syntax) .\gradlew.bat build
Warum wichtig: Reproduzierbare Builds, keine lokale Gradle-Installation nötig.
Maven Versions Plugin
Charakterisierung: Dependency-Update-Management
Typ: Maven Plugin
Beschreibung:
Hilft beim Management von Dependency- und Plugin-Versionen.
Configuration:
<plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>versions-maven-plugin</artifactId> <version>2.16.1</version> </plugin>
Verwendung:
# Veraltete Dependencies finden mvn versions:display-dependency-updates # Plugin-Updates anzeigen mvn versions:display-plugin-updates # Alle Dependencies auf neueste Version mvn versions:use-latest-releases
Warum wichtig: Hält Dependencies aktuell, reduziert Security-Vulnerabilities.
🧪 Testing & Quality Assurance
jqwik
Charakterisierung: Property-Based Testing Framework für Java
Typ: Testing-Framework
Beschreibung:
Ermöglicht Property-Based Testing – generiert automatisch Test-Daten und findet Edge Cases.
Maven:
<dependency> <groupId>net.jqwik</groupId> <artifactId>jqwik</artifactId> <version>1.7.4</version> <scope>test</scope> </dependency>
Offizielle Website: https://jqwik.net/
Verwendung:
@Property boolean absoluteValueIsNeverNegative(@ForAll int number) { return Math.abs(number) >= 0; } @Property void sortingDoesNotChangeListSize(@ForAll List<Integer> list) { List<Integer> sorted = new ArrayList<>(list); Collections.sort(sorted); assertThat(sorted).hasSameSizeAs(list); }
Warum wichtig: Findet Edge Cases, die Example-Based Testing übersieht.
TestContainers
Charakterisierung: Integration-Testing mit echten Services
Typ: Testing-Framework
Beschreibung:
Startet echte Services (Datenbanken, Message Brokers, etc.) in Docker-Containern für Integration-Tests. Eliminiert Mocking zugunsten echter Services. Unterstützt PostgreSQL, MySQL, MongoDB, Kafka, Redis und viele andere. Tests laufen mit echten Dependencies statt Mock-Objekten.
Maven:
<dependency> <groupId>org.testcontainers</groupId> <artifactId>junit-jupiter</artifactId> <version>1.19.0</version> <scope>test</scope> </dependency> <dependency> <groupId>org.testcontainers</groupId> <artifactId>postgresql</artifactId> <version>1.19.0</version> <scope>test</scope> </dependency>
Offizielle Website: https://www.testcontainers.org/
Verwendung:
@Testcontainers class DatabaseTest { @Container static PostgreSQLContainer<?> postgres = new PostgreSQLContainer<>("postgres:15") .withDatabaseName("testdb") .withUsername("test") .withPassword("test"); @Test void contextLoads() { String jdbcUrl = postgres.getJdbcUrl(); // Test mit echter PostgreSQL-Datenbank } }
Warum wichtig: Echte Integration-Tests ohne Mocking, hohe Test-Confidence.
Mockito
Charakterisierung: Mocking-Framework für Java
Typ: Testing-Library
Beschreibung:
Standard-Mocking-Framework für Java-Unit-Tests.
Maven:
<dependency> <groupId>org.mockito</groupId> <artifactId>mockito-core</artifactId> <version>5.5.0</version> <scope>test</scope> </dependency>
Offizielle Website: https://mockito.org/
Verwendung:
@Mock private UserRepository userRepository; @Test void shouldReturnUser() { User mockUser = new User("John"); when(userRepository.findById(1L)).thenReturn(mockUser); User result = userService.getUser(1L); assertThat(result.getName()).isEqualTo("John"); verify(userRepository).findById(1L); }
Warum wichtig: Isolierte Unit-Tests, unabhängig von externen Dependencies.
AssertJ
Charakterisierung: Fluent Assertion Library
Typ: Testing-Library
Beschreibung:
Moderne, lesbare Assertions für Java-Tests.
Maven:
<dependency> <groupId>org.assertj</groupId> <artifactId>assertj-core</artifactId> <version>3.24.2</version> <scope>test</scope> </dependency>
Offizielle Website: https://assertj.github.io/doc/
Verwendung:
@Test void fluentAssertions() { List<String> names = Arrays.asList("Alice", "Bob", "Charlie"); assertThat(names) .hasSize(3) .contains("Alice", "Bob") .doesNotContain("Dave") .allMatch(name -> name.length() > 2); }
Warum wichtig: Bessere Lesbarkeit, aussagekräftige Error-Messages.
📊 Monitoring & Performance
Micrometer
Charakterisierung: Metrics-Abstraction für JVM-Anwendungen
Typ: Monitoring-Library
Beschreibung:
Vendor-neutrale Metrics-API, integriert sich in Prometheus, Grafana, etc.
Maven (Spring Boot):
<dependency> <groupId>io.micrometer</groupId> <artifactId>micrometer-registry-prometheus</artifactId> </dependency>
Offizielle Website: https://micrometer.io/
Verwendung:
@RestController public class MetricsController { private final Counter requestCounter; private final Timer requestTimer; public MetricsController(MeterRegistry meterRegistry) { this.requestCounter = Counter.builder("api.requests.total") .description("Total API requests") .register(meterRegistry); this.requestTimer = Timer.builder("api.request.duration") .description("API request duration") .register(meterRegistry); } }
Warum wichtig: Einheitliche Metrics unabhängig vom Monitoring-System.
JProfiler / YourKit
Charakterisierung: Java-Performance-Profiler
Typ: Profiling-Tools (Commercial)
Beschreibung:
Professionelle Tools für Memory-Leak-Detection, Performance-Analyse und Thread-Debugging.
JProfiler: https://www.ej-technologies.com/products/jprofiler/overview.html
YourKit: https://www.yourkit.com/
Kostenlose Alternativen:
- VisualVM: Im JDK enthalten
- JConsole: Im JDK enthalten
- Eclipse MAT: https://www.eclipse.org/mat/
Warum wichtig: Unverzichtbar für Performance-Optimierung und Memory-Leak-Hunting.
🚀 Development & IDE Tools
Lombok
Charakterisierung: Boilerplate-Code-Reduktion
Typ: Annotation-Processor
Beschreibung:
Reduziert Java-Boilerplate durch Annotations (@Getter, @Setter, @Data, etc.).
Maven:
<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.30</version> <scope>provided</scope> </dependency>
Offizielle Website: https://projectlombok.org/
Verwendung:
@Data @AllArgsConstructor @NoArgsConstructor public class Person { private String name; private int age; private String email; // Getter, Setter, toString, equals, hashCode automatisch generiert }
Warum wichtig: Weniger Code, bessere Lesbarkeit, weniger Fehlerquellen.
MapStruct
Charakterisierung: Type-Safe Bean Mapping
Typ: Annotation-Processor
Beschreibung:
Generiert typisierte Mapping-Code zwischen Java-Beans zur Compile-Time.
Maven:
<dependency> <groupId>org.mapstruct</groupId> <artifactId>mapstruct</artifactId> <version>1.5.5.Final</version> </dependency> <dependency> <groupId>org.mapstruct</groupId> <artifactId>mapstruct-processor</artifactId> <version>1.5.5.Final</version> <scope>provided</scope> </dependency>
Offizielle Website: https://mapstruct.org/
Verwendung:
@Mapper public interface PersonMapper { PersonDto toDto(Person person); Person toEntity(PersonDto dto); @Mapping(source = "fullName", target = "name") PersonDto toDtoWithMapping(Person person); }
Warum wichtig: Type-Safe Mapping, Performance, keine Reflection.
Spotbugs
Charakterisierung: Static Code Analysis
Typ: Code-Quality-Tool
Beschreibung:
Findet potentielle Bugs durch statische Code-Analyse.
Maven:
<plugin> <groupId>com.github.spotbugs</groupId> <artifactId>spotbugs-maven-plugin</artifactId> <version>4.7.3.6</version> </plugin>
Offizielle Website: https://spotbugs.github.io/
Verwendung:
# SpotBugs-Analyse ausführen mvn spotbugs:spotbugs # Report anzeigen mvn spotbugs:gui
Warum wichtig: Findet potentielle Bugs vor Production-Deployment.
Checkstyle
Charakterisierung: Code-Style-Checker
Typ: Code-Quality-Tool
Beschreibung:
Überprüft Code-Formatierung und Style-Guidelines.
Maven:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-checkstyle-plugin</artifactId> <version>3.3.0</version> <configuration> <configLocation>checkstyle.xml</configLocation> </configuration> </plugin>
Offizielle Website: https://checkstyle.sourceforge.io/
Verwendung:
# Checkstyle-Check mvn checkstyle:check # Report generieren mvn checkstyle:checkstyle
Warum wichtig: Konsistenter Code-Style im Team.
DataFaker
Charakterisierung: Test-Data-Generation
Typ: Testing-Utility
Beschreibung:
Generiert realistische Test-Daten für verschiedene Anwendungsfälle.
Maven:
<dependency> <groupId>net.datafaker</groupId> <artifactId>datafaker</artifactId> <version>2.0.2</version> <scope>test</scope> </dependency>
Offizielle Website: https://www.datafaker.net/
Verwendung:
Faker faker = new Faker(); String name = faker.name().fullName(); String email = faker.internet().emailAddress(); String address = faker.address().fullAddress(); LocalDate birthday = faker.timeAndDate().birthday(); // Für Property-Based Testing mit jqwik @Provide Arbitrary<Person> persons() { return Arbitraries.randomValue(random -> { Faker faker = new Faker(random); return new Person( faker.name().firstName(), faker.name().lastName(), faker.internet().emailAddress() ); }); }
Warum wichtig: Realistische Test-Daten, keine manuellen Dummy-Daten.
🛠️ Utility Libraries
Apache Commons
Charakterisierung: Utility-Library-Collection
Typ: Utility-Libraries
Beschreibung:
Sammlung nützlicher Utility-Classes für häufige Programmier-Tasks.
Wichtigste Module:
<!-- String-Utilities --> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.13.0</version> </dependency> <!-- Collection-Utilities --> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-collections4</artifactId> <version>4.4</version> </dependency> <!-- IO-Utilities --> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.13.0</version> </dependency>
Offizielle Website: https://commons.apache.org/
Verwendung:
// String-Utilities StringUtils.isBlank(" "); // true StringUtils.capitalize("hello"); // "Hello" // Collection-Utilities CollectionUtils.isNotEmpty(list); CollectionUtils.intersection(list1, list2); // IO-Utilities FileUtils.readFileToString(file, StandardCharsets.UTF_8);
Warum wichtig: Battle-tested Utilities, weniger eigene Utility-Methods nötig.
Guava
Charakterisierung: Google’s Core Libraries für Java
Typ: Utility-Library
Beschreibung:
Google’s Collection von Utility-Classes und funktionalen Programmier-Helfern.
Maven:
<dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>32.1.3-jre</version> </dependency>
Offizielle Website: https://github.com/google/guava
Verwendung:
// Immutable Collections List<String> list = ImmutableList.of("a", "b", "c"); Map<String, Integer> map = ImmutableMap.of("key1", 1, "key2", 2); // String-Utilities Strings.isNullOrEmpty(null); // true Strings.padStart("7", 3, '0'); // "007" // Preconditions Preconditions.checkNotNull(object, "Object cannot be null"); Preconditions.checkArgument(age >= 0, "Age cannot be negative");
Warum wichtig: Hochwertige, performante Utilities von Google.
📚 Zusammenfassung & Quick-Start
Essential-Tools für jeden Java-Entwickler:
🚀 Sofort installieren:
- Maven/Gradle Wrapper – Reproduzierbare Builds
- Trivy – Security-Scanning
- jdeps – JDK-Migration-Analyse
- TestContainers – Integration-Testing
📊 Für Legacy-Code-Warrior:
- Syft – SBOM-Generation
- ArchUnit – Architecture-Testing
- ApprovalTests – Characterization-Testing
- OWASP Dependency-Check – Vulnerability-Scanning
🧪 Für Testing-Enthusiasten:
- jqwik – Property-Based Testing
- AssertJ – Fluent Assertions
- Mockito – Mocking
- DataFaker – Test-Data-Generation
⚡ Für Performance-Optimierung:
- Micrometer – Metrics
- VisualVM – Profiling (kostenlos)
- JConsole – JVM-Monitoring
Installation-Checkliste:
# Security-Tools brew install trivy syft # Java-Analysis java -version # jdeps ist im JDK enthalten # Maven-Projekt-Setup mvn wrapper:wrapper # Optional: Global Tools npm install -g @cyclonedx/cyclonedx-npm # Für Node.js-Projekte
Team-Setup-Empfehlung:
In jedes neue Java-Projekt gehört:
<!-- pom.xml essentials --> <dependencies> <!-- Testing --> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.assertj</groupId> <artifactId>assertj-core</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.mockito</groupId> <artifactId>mockito-core</artifactId> <scope>test</scope> </dependency> <!-- Utilities --> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> </dependency> </dependencies> <build> <plugins> <!-- Security --> <plugin> <groupId>org.owasp</groupId> <artifactId>dependency-check-maven</artifactId> </plugin> <!-- Code Quality --> <plugin> <groupId>com.github.spotbugs</groupId> <artifactId>spotbugs-maven-plugin</artifactId> </plugin> </plugins> </build>
Diese Tool-Liste wird regelmäßig aktualisiert basierend auf Community-Feedback und neuen Entwicklungen in der Java-Welt.
🔥 Advanced Tools für Spezialisten
Performance & JVM Tuning
JProfiler
Charakterisierung: Premium Java Performance Profiler
Typ: Commercial Profiling Tool
Beschreibung:
Professioneller Profiler für Memory-Leak-Detection, CPU-Profiling und Thread-Analyse.
Website: https://www.ej-technologies.com/products/jprofiler/
Lizenz: Commercial (Trial verfügbar)
Verwendung:
# JVM-Agent aktivieren java -agentpath:/path/to/jprofiler/bin/agent.jar myapp.jar # Remote Profiling java -agentpath:jprofiler_agent.jar=port=8849 myapp.jar
Alternativen (kostenlos):
- VisualVM:
jvisualvm
(im JDK enthalten) - JConsole:
jconsole
(im JDK enthalten) - Eclipse MAT: Memory Analyzer Tool
GCEasy
Charakterisierung: Online GC-Log-Analyzer
Typ: Web-Service (kostenlos)
Beschreibung:
Analysiert Garbage Collection Logs und gibt Performance-Empfehlungen.
Website: https://gceasy.io/
Verwendung:
# GC-Logs aktivieren java -XX:+PrintGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -Xloggc:gc.log myapp.jar # Log zu GCEasy hochladen für Analyse
Warum wichtig: Identifiziert GC-Performance-Probleme, Memory-Leaks.
Code Generation & Templates
JHipster
Charakterisierung: Full-Stack-Anwendungs-Generator
Typ: Yeoman-Generator für Spring Boot + Frontend
Beschreibung:
Generiert moderne Full-Stack-Anwendungen mit Spring Boot Backend, Angular/React/Vue Frontend, JWT-Authentication, JPA-Entities und Docker-Configuration. Basiert auf Yeoman (Node.js-Generator-Framework) und befolgt moderne Full-Stack-Best-Practices.
Installation:
npm install -g generator-jhipster
Website: https://www.jhipster.tech/
Verwendung:
# Neue Anwendung erstellen jhipster # Entity generieren jhipster entity Customer
Warum wichtig: Rapid Prototyping, Best-Practice-Setup, moderne Tech-Stacks.
OpenAPI Generator
Charakterisierung: API-Client- und Server-Code-Generator
Typ: Code-Generation-Tool
Beschreibung:
Generiert API-Client- und Server-Code aus OpenAPI/Swagger-Spezifikationen.
Installation:
# Via npm npm install @openapitools/openapi-generator-cli -g # Via Homebrew brew install openapi-generator
Website: https://openapi-generator.tech/
Verwendung:
# Java-Client generieren openapi-generator generate -i api.yaml -g java -o client/ # Spring Boot Server generieren openapi-generator generate -i api.yaml -g spring -o server/
Maven Plugin:
<plugin> <groupId>org.openapitools</groupId> <artifactId>openapi-generator-maven-plugin</artifactId> <version>7.0.1</version> <executions> <execution> <goals> <goal>generate</goal> </goals> <configuration> <inputSpec>src/main/resources/api.yaml</inputSpec> <generatorName>java</generatorName> <output>${project.build.directory}/generated-sources</output> </configuration> </execution> </executions> </plugin>
Warum wichtig: API-First-Development, Type-Safety, konsistente Clients.
Database & Migration Tools
Flyway
Charakterisierung: Database Version Control
Typ: Database Migration Tool
Beschreibung:
Versioniert und migriert Datenbank-Schemas automatisch.
Maven:
<plugin> <groupId>org.flywaydb</groupId> <artifactId>flyway-maven-plugin</artifactId> <version>9.22.3</version> <configuration> <url>jdbc:postgresql://localhost:5432/mydb</url> <user>user</user> <password>password</password> </configuration> </plugin>
Website: https://flywaydb.org/
Verwendung:
-- V1__Create_person_table.sql CREATE TABLE person ( id SERIAL PRIMARY KEY, name VARCHAR(100) NOT NULL, email VARCHAR(255) UNIQUE NOT NULL ); -- V2__Add_age_column.sql ALTER TABLE person ADD COLUMN age INTEGER;
# Migration ausführen mvn flyway:migrate # Status prüfen mvn flyway:info
Warum wichtig: Reproduzierbare Database-Deployments, Versionskontrolle für Schema.
Liquibase
Charakterisierung: Database Change Management
Typ: Database Migration Tool (XML/YAML-basiert)
Beschreibung:
Alternative zu Flyway mit XML/YAML-basierter Konfiguration.
Maven:
<plugin> <groupId>org.liquibase</groupId> <artifactId>liquibase-maven-plugin</artifactId> <version>4.24.0</version> </plugin>
Website: https://www.liquibase.org/
Verwendung:
<!-- changelog.xml --> <databaseChangeLog> <changeSet id="1" author="developer"> <createTable tableName="person"> <column name="id" type="bigint" autoIncrement="true"> <constraints primaryKey="true"/> </column> <column name="name" type="varchar(100)"> <constraints nullable="false"/> </column> </createTable> </changeSet> </databaseChangeLog>
Warum wichtig: Database-agnostische Migrations, Rollback-Support.
Documentation & API Tools
SpringDoc OpenAPI
Charakterisierung: OpenAPI 3 Integration für Spring Boot
Typ: Documentation-Library
API = Application Programming Interface
Beschreibung:
Generiert automatisch OpenAPI/Swagger-Dokumentation für Spring Boot REST APIs. OpenAPI (früher Swagger) ist der Standard zur Beschreibung von REST-Schnittstellen. Erstellt interaktive API-Dokumentation mit Test-Interface (Swagger UI) unter /swagger-ui.html
.
Maven:
<dependency> <groupId>org.springdoc</groupId> <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId> <version>2.2.0</version> </dependency>
Website: https://springdoc.org/
Verwendung:
@RestController @Tag(name = "Person", description = "Person management API") public class PersonController { @GetMapping("/persons") @Operation(summary = "Get all persons") @ApiResponses(value = { @ApiResponse(responseCode = "200", description = "Found persons"), @ApiResponse(responseCode = "404", description = "No persons found") }) public List<Person> getAllPersons() { return personService.findAll(); } }
Swagger UI verfügbar unter: http://localhost:8080/swagger-ui.html
Warum wichtig: Automatische API-Dokumentation, interaktive API-Explorer.
AsciiDoctor
Charakterisierung: Dokumentations-Tool
Typ: Markup-Processor
Beschreibung:
Erstellt professionelle Dokumentation aus AsciiDoc-Files.
Maven:
<plugin> <groupId>org.asciidoctor</groupId> <artifactId>asciidoctor-maven-plugin</artifactId> <version>2.2.4</version> <executions> <execution> <id>generate-docs</id> <phase>prepare-package</phase> <goals> <goal>process-asciidoc</goal> </goals> </execution> </executions> </plugin>
Website: https://asciidoctor.org/
Verwendung:
= Java Fleet Systems API Documentation :toc: :numbered: == Introduction This document describes the REST API endpoints. == Endpoints === GET /persons Returns all persons in the system.
[source,bash]
—- curl -X GET http://localhost:8080/api/persons —-
Warum wichtig: Professionelle Dokumentation, PDF/HTML-Export, Versionierung.
Containerization & Cloud Tools
Jib
Charakterisierung: Container-Image-Builder für Java
Typ: Build-Tool-Plugin
Beschreibung:
Erstellt Container-Images direkt aus Maven/Gradle ohne Dockerfile.
Maven:
<plugin> <groupId>com.google.cloud.tools</groupId> <artifactId>jib-maven-plugin</artifactId> <version>3.4.0</version> <configuration> <to> <image>gcr.io/my-project/my-app</image> </to> </configuration> </plugin>
Website: https://github.com/GoogleContainerTools/jib
Verwendung:
# Image bauen und zu Registry pushen mvn jib:build # Image bauen zu lokaler Docker Registry mvn jib:dockerBuild # Tar-Archiv erstellen mvn jib:buildTar
Warum wichtig: Optimierte Container-Images, kein Docker-Daemon nötig, Layer-Caching.
Fabric8 Docker Maven Plugin
Charakterisierung: Docker-Integration für Maven
Typ: Build-Plugin
Beschreibung:
Integriert Docker-Builds und -Container-Management in Maven-Lifecycle.
Maven:
<plugin> <groupId>io.fabric8</groupId> <artifactId>docker-maven-plugin</artifactId> <version>0.43.4</version> <configuration> <images> <image> <name>my-app:latest</name> <build> <dockerFile>Dockerfile</dockerFile> <contextDir>${project.basedir}</contextDir> </build> </image> </images> </configuration> </plugin>
Website: https://dmp.fabric8.io/
Verwendung:
# Docker-Image bauen mvn docker:build # Container starten mvn docker:start # Container stoppen mvn docker:stop
Warum wichtig: Docker-Integration in Maven, Integration-Tests mit Containern.
Security & Compliance Tools
Cosign
Charakterisierung: Container-Image-Signing-Tool
Typ: Security-Tool (CNCF)
Beschreibung:
Signiert und verifiziert Container-Images für Supply-Chain-Security.
Installation:
# macOS (Homebrew) brew install cosign # Linux (Curl) curl -O -L "https://github.com/sigstore/cosign/releases/latest/download/cosign-linux-amd64" sudo mv cosign-linux-amd64 /usr/local/bin/cosign sudo chmod +x /usr/local/bin/cosign # Windows (Winget) winget install sigstore.cosign # Windows (Chocolatey) choco install cosign # Windows (Manual) # Download cosign-windows-amd64.exe from GitHub Releases
Website: https://docs.sigstore.dev/cosign/overview
Verwendung:
# Keypair generieren cosign generate-key-pair # Image signieren cosign sign --key cosign.key my-app:latest # Signatur verifizieren cosign verify --key cosign.pub my-app:latest
Warum wichtig: Supply-Chain-Security, Image-Authentizität, Compliance.
Snyk
Charakterisierung: Developer-Security-Platform
Typ: Security-as-a-Service
Beschreibung:
Findet und behebt Vulnerabilities in Dependencies, Container-Images und Code.
Installation:
npm install -g snyk
Website: https://snyk.io/
Verwendung:
# Auth (benötigt Account) snyk auth # Projekt scannen snyk test # Automatische Fixes anwenden snyk fix # Container-Image scannen snyk container test my-app:latest # Code-Analyse snyk code test
Warum wichtig: Kontinuierliche Security-Überwachung, automatische Fixes, Developer-Integration.
Message Queues & Event Streaming
Testcontainers – Kafka Module
Charakterisierung: Integration Testing für Apache Kafka
Typ: Testing-Framework-Extension
Beschreibung:
Ermöglicht Integration-Tests mit echtem Kafka-Cluster.
Maven:
<dependency> <groupId>org.testcontainers</groupId> <artifactId>kafka</artifactId> <version>1.19.0</version> <scope>test</scope> </dependency>
Verwendung:
@Testcontainers class KafkaIntegrationTest { @Container static KafkaContainer kafka = new KafkaContainer(DockerImageName.parse("confluentinc/cp-kafka:7.4.0")); @Test void shouldProduceAndConsumeMessage() { String bootstrapServers = kafka.getBootstrapServers(); // Producer und Consumer mit echtem Kafka testen Properties props = new Properties(); props.put("bootstrap.servers", bootstrapServers); // Test Implementation... } }
Warum wichtig: Realistische Integration-Tests für Event-Streaming-Anwendungen.
Embedded Kafka (Spring)
Charakterisierung: Embedded Kafka für Spring-Tests
Typ: Testing-Utility
Beschreibung:
Eingebetteter Kafka-Server für Spring-Integration-Tests.
Maven:
<dependency> <groupId>org.springframework.kafka</groupId> <artifactId>spring-kafka-test</artifactId> <scope>test</scope> </dependency>
Verwendung:
@SpringBootTest @EmbeddedKafka(partitions = 1, topics = {"test-topic"}) class KafkaProducerTest { @Autowired private KafkaTemplate<String, String> kafkaTemplate; @Test void shouldSendMessage() { kafkaTemplate.send("test-topic", "test-message"); // Assertions... } }
Warum wichtig: Schnelle Kafka-Tests ohne externe Dependencies.
JSON & Data Processing
Jackson
Charakterisierung: JSON-Processing-Library
Typ: Data-Binding-Framework
JSON = JavaScript Object Notation
Beschreibung:
Standard-JSON-Library für Java, integriert in Spring Boot. Konvertiert zwischen Java-Objekten und JSON (JavaScript Object Notation) – dem Standard-Datenformat für REST APIs und Web-Services. Unterstützt auch XML, YAML und andere Formate.
Maven:
<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.15.2</version> </dependency>
Website: https://github.com/FasterXML/jackson
Verwendung:
ObjectMapper mapper = new ObjectMapper(); // Serialization Person person = new Person("John", "Doe"); String json = mapper.writeValueAsString(person); // Deserialization Person deserializedPerson = mapper.readValue(json, Person.class); // Custom Configuration ObjectMapper customMapper = JsonMapper.builder() .addModule(new JavaTimeModule()) .disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS) .build();
Warum wichtig: Standard für JSON in Java, hochperformant, flexibel konfigurierbar.
JSON Path
Charakterisierung: JSON-Query-Language
Typ: JSON-Processing-Utility
Beschreibung:
XPath-ähnliche Syntax für JSON-Dokumente.
Maven:
<dependency> <groupId>com.jayway.jsonpath</groupId> <artifactId>json-path</artifactId> <version>2.8.0</version> </dependency>
Website: https://github.com/json-path/JsonPath
Verwendung:
String json = "{'persons':[{'name':'John','age':30},{'name':'Jane','age':25}]}"; // Einfache Queries List<String> names = JsonPath.read(json, "$.persons[*].name"); Integer firstPersonAge = JsonPath.read(json, "$.persons[0].age"); // Mit Filtern List<String> adultsNames = JsonPath.read(json, "$.persons[?(@.age >= 18)].name");
Warum wichtig: Einfache JSON-Queries, nützlich für Tests und Data-Processing.
Configuration Management
Spring Boot Configuration Processor
Charakterisierung: Configuration Metadata Generator
Typ: Annotation Processor
Beschreibung:
Generiert Metadata für Type-Safe Configuration Properties.
Maven:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency>
Verwendung:
@ConfigurationProperties(prefix = "app") @Data public class AppProperties { /** * Application name */ private String name = "MyApp"; /** * Security settings */ private Security security = new Security(); @Data public static class Security { /** * Enable JWT authentication */ private boolean jwtEnabled = false; /** * JWT secret key */ private String jwtSecret; } }
application.yml:
app: name: PersonApp security: jwt-enabled: true jwt-secret: ${JWT_SECRET:default-secret}
Warum wichtig: Type-Safe Configuration, IDE-Unterstützung, Dokumentation.
Owner (Configuration Library)
Charakterisierung: Type-Safe Property Loading
Typ: Configuration-Framework
Beschreibung:
Alternative zu Spring’s @ConfigurationProperties mit mehr Features.
Maven:
<dependency> <groupId>org.aeonbits.owner</groupId> <artifactId>owner</artifactId> <version>1.0.12</version> </dependency>
Website: http://owner.aeonbits.org/
Verwendung:
@Config.Sources({ "classpath:application.properties", "system:properties", "system:env" }) public interface AppConfig extends Config { @DefaultValue("localhost") String hostname(); @Key("server.port") @DefaultValue("8080") int port(); @Key("database.url") String databaseUrl(); @Key("feature.enabled") @DefaultValue("false") boolean isFeatureEnabled(); } // Usage AppConfig config = ConfigFactory.create(AppConfig.class); String host = config.hostname();
Warum wichtig: Type-Safety, Multiple Property-Sources, Default-Values.
HTTP Clients & Web Services
OkHttp
Charakterisierung: HTTP-Client-Library
Typ: Networking-Library
Beschreibung:
Moderner, effizienter HTTP-Client mit Connection-Pooling und Interceptors.
Maven:
<dependency> <groupId>com.squareup.okhttp3</groupId> <artifactId>okhttp</artifactId> <version>4.12.0</version> </dependency>
Website: https://square.github.io/okhttp/
Verwendung:
OkHttpClient client = new OkHttpClient.Builder() .connectTimeout(10, TimeUnit.SECONDS) .readTimeout(30, TimeUnit.SECONDS) .addInterceptor(new LoggingInterceptor()) .build(); Request request = new Request.Builder() .url("https://api.example.com/users") .header("Authorization", "Bearer " + token) .build(); try (Response response = client.newCall(request).execute()) { String responseBody = response.body().string(); // Process response }
Warum wichtig: Performance, Connection-Pooling, Interceptor-Pattern.
Feign
Charakterisierung: Declarative HTTP Client
Typ: HTTP-Client-Framework
Beschreibung:
Deklarativer HTTP-Client, integriert sich gut in Spring Cloud.
Maven (Spring Cloud):
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency>
Website: https://github.com/OpenFeign/feign
Verwendung:
@FeignClient(name = "person-service", url = "https://api.example.com") public interface PersonClient { @GetMapping("/persons") List<Person> getAllPersons(); @GetMapping("/persons/{id}") Person getPersonById(@PathVariable Long id); @PostMapping("/persons") Person createPerson(@RequestBody PersonCreateRequest request); } // Usage in Service @Service public class PersonService { private final PersonClient personClient; public List<Person> getPersons() { return personClient.getAllPersons(); } }
Warum wichtig: Deklarative API-Calls, Spring-Integration, Load-Balancing.
Caching & Performance
Caffeine
Charakterisierung: High-Performance Caching Library
Typ: In-Memory-Cache
Beschreibung:
Moderner Ersatz für Guava Cache mit besserer Performance.
Maven:
<dependency> <groupId>com.github.ben-manes.caffeine</groupId> <artifactId>caffeine</artifactId> <version>3.1.8</version> </dependency>
Website: https://github.com/ben-manes/caffeine
Verwendung:
// Einfacher Cache Cache<String, Person> cache = Caffeine.newBuilder() .maximumSize(10_000) .expireAfterWrite(5, TimeUnit.MINUTES) .build(); // Verwendung Person person = cache.get(key, k -> personService.findById(k)); // LoadingCache LoadingCache<String, Person> loadingCache = Caffeine.newBuilder() .maximumSize(10_000) .expireAfterWrite(5, TimeUnit.MINUTES) .build(key -> personService.findById(key)); Person person = loadingCache.get(personId);
Spring Boot Integration:
@Configuration @EnableCaching public class CacheConfig { @Bean public CacheManager cacheManager() { CaffeineCacheManager cacheManager = new CaffeineCacheManager(); cacheManager.setCaffeine(Caffeine.newBuilder() .initialCapacity(100) .maximumSize(1000) .expireAfterAccess(10, TimeUnit.MINUTES)); return cacheManager; } }
Warum wichtig: High-Performance, Memory-Efficient, Spring-Integration.
Redis (Jedis/Lettuce)
Charakterisierung: Distributed Caching
Typ: NoSQL-Database/Cache
Beschreibung:
In-Memory-Datenbank für Caching, Sessions, Message-Queues.
Maven (Spring Boot):
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>
Verwendung:
@Service public class PersonCacheService { private final RedisTemplate<String, Person> redisTemplate; @Cacheable(value = "persons", key = "#id") public Person getPersonById(Long id) { return personService.findById(id); } @CacheEvict(value = "persons", key = "#person.id") public Person updatePerson(Person person) { return personService.save(person); } }
Configuration:
spring: redis: host: localhost port: 6379 timeout: 2000ms lettuce: pool: max-active: 8 max-idle: 8
Warum wichtig: Distributed Caching, Session-Storage, High-Performance.
📋 Tool-Matrix: Wann welches Tool?
🔍 Security-Scanning-Entscheidung:
Use Case | Tool | Warum |
---|---|---|
Container-Images scannen | Trivy | Schnell, genau, findet CVEs in allen Layern |
SBOM generieren | Syft | Standard-konform (SPDX, CycloneDX), viele Outputs |
Dependencies in Build | OWASP Dependency-Check | Maven/Gradle-Integration, CVSS-Bewertung |
Commercial-Grade | Snyk | Developer-Experience, Auto-Fix, SaaS |
🏛️ Legacy-Code-Modernisierung:
Phase | Tool | Zweck |
---|---|---|
Analysis | jdeps | JDK-Compatibility prüfen, Internal APIs finden |
Testing | ApprovalTests | Behavior dokumentieren (Golden Master) |
Architecture | ArchUnit | Architecture-Regeln durchsetzen (DSL) |
Migration | Charakterisierung | Sicherheitsnetz für Refactoring aufbauen |
🧪 Testing-Strategie:
Test-Typ | Tool | Wann einsetzen |
---|---|---|
Unit Tests | JUnit 5 + Mockito | Basis für TDD, isolierte Tests |
Property-Based | jqwik | Complex Logic, Edge Cases finden |
Integration | TestContainers | Echte Services (Docker-basiert) testen |
Legacy Code | ApprovalTests | Existing Behavior capture (Characterization) |
⚡ Performance-Optimierung:
Problem | Tool | Lösung |
---|---|---|
Memory Leaks | VisualVM/JProfiler | Heap-Analyse, GC-Monitoring |
GC-Probleme | GCEasy | GC-Log-Analyse, Tuning-Empfehlungen |
Slow Methods | JProfiler | CPU-Profiling, Hotspot-Detection |
Caching | Caffeine | High-Performance In-Memory-Cache |
🚀 Windows-Installationsleitfaden für Java-Tools
📋 Windows Package Manager – Empfohlene Optionen:
1. Chocolatey (am meisten unterstützt):
# Chocolatey installieren (einmalig) Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1')) # Tools installieren choco install trivy syft cosign
2. Scoop (modern, sauber):
# Scoop installieren (einmalig) Set-ExecutionPolicy RemoteSigned -Scope CurrentUser irm get.scoop.sh | iex # Tools installieren scoop install trivy syft
3. Winget (Windows 10/11 integriert):
winget install sigstore.cosign # Nicht alle Tools verfügbar
⚠️ Wichtige Windows-spezifische Hinweise:
PowerShell vs. CMD:
- Die meisten Beispiele funktionieren in PowerShell und CMD
- PowerShell ist empfohlen (bessere Syntax, Unicode-Support)
Path-Trenner:
- Windows:
\
(Backslash) - Linux/Mac:
/
(Forward Slash) - Java-Tools verstehen meist beide
Beispiel Windows-Pfade:
# jdeps auf Windows jdeps --jdk-internals target\classes\ # Trivy auf Windows trivy fs C:\path\to\project # Maven Wrapper auf Windows .\mvnw.cmd clean install