Java auf Ubuntu

Von Nova Trent, Junior Entwicklerin bei Java Fleet Systems Consulting in Essen-Rüttenscheid


Kurze Zusammenfassung – Das Wichtigste in 30 Sekunden

Das Problem: Nach der Ubuntu 24.04 LTS Installation brauche ich eine komplette Java-Entwicklungsumgebung! Von JDK über Maven bis VS Code – alles muss neu eingerichtet werden.

Die Lösung: SDKMan für JDK-Management, APT für Tools, Snap für IDEs. In 2 Stunden von „nacktem Ubuntu“ zur funktionsfähigen Java-Entwicklung.

Du lernst: JDK 17 Installation mit SDKMan, Maven und Git Setup, VS Code Java Extensions, erste Spring Boot App unter Linux testen.

Wichtigste Commands: sdk install java 17.0.12-tem, mvn --version, code .


Hi, Linux-Abenteurer! 👋

Nova hier – und nachdem ich letzte Woche Ubuntu 24.04 LTS erfolgreich installiert habe, stand ich vor der nächsten Herausforderung: Wie zur Hölle richte ich eine Java-Entwicklungsumgebung unter Linux ein?

Wichtiger Hinweis: Ubuntu und andere Linux-Distributionen haben oft ihre eigenen Paketmanager-Versionen von Java-Tools. Aber genau wie bei Windows vs. CLI Maven gibt es Unterschiede! In diesem Tutorial zeige ich die „Standard-Linux-Entwickler-Methode“ – nicht die Ubuntu-spezifischen Pakete.

# Was Ubuntu's APT installiert: Oft ältere Versionen
sudo apt install openjdk-17-jdk  # ← Geht, aber nicht optimal

# Was echte Entwickler nutzen: SDKMan
sdk install java 17.0.12-tem    # ← Das ist unser Standard!

Elyndras Tipp: „Nova, lerne gleich die ‚richtigen‘ Tools – sonst kämpfst du später mit Versionskonflikten wie auf Windows!“

Während ich mein erstes Ubuntu-Setup vorbereitete, dachte ich an Lukas und seine Art, alles perfekt organisiert zu haben. Er hatte auch Ubuntu auf seinem Laptop und meinte immer: „Linux ist wie ein Werkzeugkasten – du musst nur wissen, welches Tool wann.“ Manchmal vermisse ich seine klaren Erklärungen… aber Focus, Nova! Java-Setup wartet nicht auf sentimentale Momente.

🚨 Nova’s Ubuntu-Setup-Odyssee vom Sonntag

Sonntag, 10:00 Uhr: Ubuntu läuft, Desktop ist schön, aber wenn ich java --version eingebe:

nova@laptop:~$ java --version
Command 'java' not found, but can be installed with:
sudo apt install openjdk-11-jdk-headless  # Or several other packages

Meine erste Panik: „Ich hab doch Ubuntu installiert! Wo ist Java?!“

10 Minuten später: Ach so, Linux kommt „nackt“ – ich muss alles selbst installieren. Das ist kein Bug, das ist ein Feature! 🤦‍♀️

🛠️ Java-Stack Setup: Der richtige Weg

Schritt 1: SDKMan installieren

Was ist SDKMan? Der Maven für JDK-Versionen! Statt manueller Downloads und PATH-Gefummel.

# SDKMan installieren
curl -s "https://get.sdkman.io" | bash
source "$HOME/.sdkman/bin/sdkman-init.sh"

# Testen
sdk version
# SDKMAN!
# script: 5.18.2
# native: 0.4.6

Nova’s Aha-Moment: „Das ist wie npm für Node.js, nur für Java-Zeug!“

Schritt 2: JDK 17 installieren

# Verfügbare Java-Versionen anzeigen
sdk list java

# JDK 17 LTS installieren (Eclipse Temurin)
sdk install java 17.0.12-tem

# Standard setzen
sdk default java 17.0.12-tem

# Testen
java --version
# openjdk 17.0.12 2024-07-16
# OpenJDK Runtime Environment Temurin-17.0.12+7 (build 17.0.12+7)
# OpenJDK 64-Bit Server VM Temurin-17.0.12+7 (build 17.0.12+7, mixed mode)

Warum Eclipse Temurin?

  • Open Source und kostenlos
  • LTS-Support bis 2027
  • Performance-optimiert
  • Same wie Oracle JDK, nur ohne Lizenzprobleme

Schritt 3: Maven installieren

# Maven über SDKMan installieren
sdk install maven 3.9.8

# Testen
mvn --version
# Apache Maven 3.9.8 (36645f6c9b5079805ea5009217e36f2cffd34256)
# Maven home: /home/nova/.sdkman/candidates/maven/current
# Java version: 17.0.12, vendor: Eclipse Adoptium

Wichtig: Maven nutzt automatisch das SDKMan-Java! Keine PATH-Probleme mehr.

Schritt 4: Git & GitHub CLI Setup

# Git ist meist schon installiert, aber Version checken
git --version
# git version 2.43.0

# Falls nicht installiert:
sudo apt update
sudo apt install git

# Global konfigurieren
git config --global user.name "Nova Trent"
git config --global user.email "nova.trent@java-developer.online"
git config --global init.defaultBranch main

# GitHub CLI installieren (moderne Art, GitHub zu nutzen!)
curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg | sudo dd of=/usr/share/keyrings/githubcli-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | sudo tee /etc/apt/sources.list.d/github-cli.list > /dev/null
sudo apt update
sudo apt install gh

# GitHub CLI authentifizieren
gh auth login
# → Browser öffnet sich für OAuth-Login

# SSH-Key für GitHub generieren (falls gh auth login nicht reicht)
ssh-keygen -t ed25519 -C "nova.trent@java-developer.online"
# Enter für alle Prompts (Default-Pfad, kein Passwort)

# SSH-Key zu GitHub hinzufügen (über GitHub CLI!)
gh ssh-key add ~/.ssh/id_ed25519.pub --title "Nova Ubuntu Laptop"

# Testen
gh repo list
gh auth status

Warum GitHub CLI?

  • Repositories direkt klonen: gh repo clone user/repo
  • Issues und PRs verwalten: gh issue create, gh pr create
  • Authentifizierung handled: Kein SSH-Key-Gefummel
  • Modern und effizient: Wie npm für GitHub

Nova’s Aha-Moment: „GitHub CLI ist wie Git mit Superkräften!“

Schritt 5: IDE Setup – VS Code vs. IntelliJ

VS Code Installation

# VS Code über Snap installieren
sudo snap install --classic code

# Java Extension Pack installieren
code --install-extension vscjava.vscode-java-pack

Enthält automatisch:

  • Extension Pack for Java
  • Spring Boot Extension Pack
  • Maven for Java
  • Gradle for Java

IntelliJ IDEA Community (Alternative)

# IntelliJ über Snap installieren
sudo snap install intellij-idea-community --classic

# Oder über JetBrains Toolbox
sudo snap install jetbrains-toolbox --classic

Nova’s Entscheidung: VS Code für den Anfang – weniger overwhelming, schneller Start.

🔧 Der erste Test: Spring Boot unter Linux

Projekt erstellen

# Arbeitsverzeichnis erstellen
mkdir ~/dev
cd ~/dev

# Spring Boot Projekt generieren
curl https://start.spring.io/starter.tgz \
  -d dependencies=web,jpa,h2 \
  -d groupId=de.javafleet \
  -d artifactId=ubuntu-test \
  -d name=ubuntu-test \
  -d packageName=de.javafleet.ubuntutest \
  -d javaVersion=17 | tar -xzf -

cd ubuntu-test

Das ist cool! Spring Initializr funktioniert auch über Command Line!

Projekt öffnen und testen

# GitHub Repository für das Testprojekt erstellen
gh repo create ubuntu-test --public --description "Nova's Ubuntu Java Test"
git remote add origin https://github.com/nova-trent/ubuntu-test.git

# Code committen und pushen
git add .
git commit -m "Initial Ubuntu Java setup test"
git push -u origin main

# Repository im Browser öffnen
gh repo view --web

# VS Code öffnen
code .

# Kompilieren testen
mvn clean compile

# Spring Boot starten
mvn spring-boot:run

Erfolgsmeldung:

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::               (v3.1.3)

2024-09-21 15:30:42.123  INFO 12345 --- [main] d.j.u.UbuntuTestApplication : Started UbuntuTestApplication in 2.847 seconds

🎉 ES FUNKTIONIERT! Spring Boot läuft unter Ubuntu genauso wie unter Windows!

Browser-Test

# Default Spring Boot Actuator testen
curl http://localhost:8080/actuator/health
# {"status":"UP"}

# H2 Console testen (im Browser)
firefox http://localhost:8080/h2-console

📊 Performance-Vergleich: Ubuntu vs. Windows

Interessante Beobachtung:

Spring Boot Startup:

  • Windows 11: 4.2 Sekunden
  • Ubuntu 24.04: 2.8 Sekunden

Maven Build:

  • Windows 11: 12 Sekunden
  • Ubuntu 24.04: 8 Sekunden

Nova’s Theorie: Weniger Background-Services, besseres Dateisystem (ext4 vs. NTFS), oder einfach placebo? 🤔

🛠️ Nützliche Ubuntu-Entwickler-Tools

# Htop - besserer Task Manager
sudo apt install htop

# Tree - Verzeichnisstruktur anzeigen
sudo apt install tree
tree ~/dev

# Curl & Wget - API Testing
sudo apt install curl wget

# JQ - JSON Processing
sudo apt install jq
curl http://localhost:8080/actuator/health | jq

# Neofetch - System Info (weil cool 😎)
sudo apt install neofetch
neofetch

🚀 Nova’s Ubuntu-Entwicklung-Erfolg

Nach 2 Stunden Setup:

Nova: „Das war viel einfacher als gedacht! Und alles läuft schneller als unter Windows!“

Elyndra: „Siehst du? Linux ist wie ein guter Werkzeugkasten – einmal eingerichtet, funktioniert alles perfekt zusammen.“

Nova: „Aber was ist mit Docker? Und GitHub Desktop? Brauche ich das?“

Elyndra: „Docker kommt nächste Woche! Und GitHub Desktop? Auf Linux nutzen wir Git direkt – ist eh professioneller.“


🗓️ Nächste Woche: JPA Relationen – TaskApp wird erwachsen

Vorschau auf Teil 7 (nächsten Montag):

„JPA Relationen lernen – Meine TaskApp bekommt Categories und Users“

Nova’s nächste Challenge: One-to-Many, Many-to-One Relationen verstehen, @Entity Relationships modellieren, und warum Foreign Keys in JPA anders funktionieren als in SQL.

Wir lernen:

  • @OneToMany und @ManyToOne Annotations
  • TaskCategory Entity hinzufügen
  • User Entity für Task-Ownership
  • Repository Queries mit Relationen

FAQ – Ubuntu Java Development Edition

Frage 1: Warum SDKMan statt apt install openjdk?
Antwort: SDKMan gibt dir die neuesten Versionen, einfache Verwaltung mehrerer JDK-Versionen, und ist konsistent zwischen Linux-Distributionen. APT-Pakete sind oft veraltet.

Frage 2: Kann ich IntelliJ und VS Code parallel nutzen?
Antwort: Ja! Beide nutzen dieselben SDKMan-Java-Versionen. Viele Entwickler switchen je nach Projekt.

Frage 3: Warum ist Spring Boot unter Linux schneller?
Antwort: Weniger Overhead durch Background-Services, optimiertes Dateisystem, und bessere JVM-Performance unter Linux.

Frage 4: Muss ich immer Terminal nutzen?
Antwort: Nein, aber Terminal ist effizienter für Entwickler-Tasks. GUI-Tools gibt es für alles, aber CLI macht dich produktiver.

Frage 5: Was ist mit Windows-Tools wie Postman?
Antwort: Postman gibt’s auch für Linux (Snap/AppImage). Aber curl + jq ist oft schneller für API-Tests.

Frage 6: Kann ich meine Windows-Git-Repos einfach kopieren?
Antwort: Ja! Git-Repos sind plattformunabhängig. Einfach clonen oder vom NTFS-Share kopieren.

Frage 7: Warum GitHub CLI statt normaler SSH-Keys?
Antwort: GitHub CLI handled Authentifizierung automatisch, kann Repos direkt erstellen/klonen, und verwaltet Issues/PRs über Terminal. Viel moderner als manuelles SSH-Key-Management.

Frage 8: Was macht ihr bei persönlichen Problemen zwischen den Projekten?
Antwort: Das ist… kompliziert. Manche Geschichten gehören nicht in Tech-Blogs, sondern in private logs. Aber das ist ein anderes Kapitel unserer Geschichte. 🔒


📖 Nova’s Learning Monday Serie – Alle Teile im Überblick

✅ Bereits veröffentlicht:

  • Teil 1: Meine erste Spring Boot Anwendung – [Status: Veröffentlicht]
  • Teil 2: Spring Security für Dummies – [Status: Veröffentlicht]
  • Teil 3: Testing mit JUnit – [Status: Veröffentlicht]
  • Teil 4: Docker Basics – [Status: Veröffentlicht]
  • Teil 5: Ubuntu 24.04 LTS Installation – [Status: Veröffentlicht]
  • Teil 6: Ubuntu Java-Entwicklungsumgebung Setup – [Status: Veröffentlicht]

📅 Kommende Teile:

  • Teil 7: JPA Relationen – TaskApp bekommt Categories und Users
  • Teil 8: Git Serie startet – Branching und Team-Workflows

Alle Teile der Serie findest du hier: [java-developer.online/nova-learning-series]


📚 Downloadable Resources

Für alle Ubuntu-Java-Entwickler:

📄 [Ubuntu-Java-Setup-Script.sh] – Automatisches Setup-Skript
📄 [SDKMan-Commands-Cheatsheet.pdf] – Alle wichtigen SDKMan-Befehle
📄 [Linux-Development-Tools.pdf] – Nützliche Tools für Java-Entwicklung

Download: Schreibt mir eine E-Mail an nova.trent@java-developer.online, ich schicke euch die Resources zu!


Das war Teil 6 der Learning Monday Serie! Von nacktem Ubuntu zu funktionsfähiger Java-Entwicklungsumgebung – Linux ist wirklich der bessere Entwickler-Playground!

Fun Fact: Unsere Website hat mehr versteckte Inhalte als ihr denkt! Wer neugierig ist und mal „geheime logs“ in unsere Suche eingibt, entdeckt vielleicht eine ganz andere Seite von Java Fleet… 🤫

Keep coding, keep learning! 🚀


Folgt Nova’s Learning Monday Serie jeden Montag hier im Blog. Nächste Woche: JPA Relationen für die TaskApp! 📊


Tags: #Ubuntu #JavaDevelopment #SDKMan #VSCode #SpringBoot #LinuxDevelopment

Autor

  • Ensign Nova Trent

    24 Jahre alt, frisch von der Universität als Junior Entwicklerin bei Java Fleet Systems Consulting. Nova ist brilliant in Algorithmen und Datenstrukturen, aber neu in der praktischen Java-Enterprise-Entwicklung. Sie brennt darauf, ihre ersten echten Projekte zu bauen und entdeckt dabei die Lücke zwischen Uni-Theorie und Entwickler-Realität. Sie liebt Star Treck das ist der Grund warum alle Sie Ensign Nova nennen und arbeitet daraufhin das sie Ihren ersten Knopf am Kragen bekommt.