Warum benutzerdefinierte Erweiterungen? Weil wir es können!

Seien wir ehrlich: Standardlösungen reichen nicht immer aus. Manchmal muss man selbst Hand anlegen und etwas maßgeschneidertes entwickeln. Hier kommen benutzerdefinierte Quarkus-Erweiterungen ins Spiel. Sie sind wie die geheime Zutat, die Ihre Anwendung einzigartig leistungsstark macht.

"Mit großer Macht kommt große Verantwortung" – Onkel Ben (und jeder Quarkus-Entwickler jemals)

Die Zutaten für unseren Erweiterungstrank

Bevor wir loslegen, sammeln wir unsere Werkzeuge:

  • Eine Prise Kreativität (keine Sorge, davon haben wir genug)
  • Quarkus (natürlich)
  • Jakarta EE (unser treuer Begleiter)
  • Ein Hauch von Geduld (glauben Sie mir, Sie werden es brauchen)

Schritt 1: Konzipieren Sie Ihre Erweiterung

Zuallererst – was soll Ihre Erweiterung tun? Für dieses Tutorial erstellen wir etwas Spaßiges und Nützliches: eine "RandomQuoteGenerator"-Erweiterung. Denn wer braucht nicht ein wenig Weisheit (oder Albernheit) in seinem Code?

Schritt 2: Einrichten des Projekts

Jetzt wird es ernst. Starten Sie Ihr Terminal und erstellen Sie ein neues Quarkus-Erweiterungsprojekt:

mvn io.quarkus:quarkus-maven-plugin:create-extension -DextensionId=io.mycompany:quarkus-random-quote-generator
Bash

Dieser Befehl erstellt eine grundlegende Struktur für unsere Erweiterung. Es ist wie das Fundament eines Hauses – noch nicht sehr aufregend, aber unerlässlich.

Schritt 3: Implementierung der Kernfunktionalität

Jetzt fügen wir etwas Substanz hinzu. Wir erstellen eine RandomQuoteGenerator-Klasse, die die Hauptarbeit übernimmt:

package io.mycompany.quarkus.random.quote.generator;

import jakarta.enterprise.context.ApplicationScoped;
import java.util.List;
import java.util.Random;

@ApplicationScoped
public class RandomQuoteGenerator {
    private static final List<String> QUOTES = List.of(
        "I'm not a great programmer; I'm just a good programmer with great habits." - Kent Beck,
        "Talk is cheap. Show me the code." - Linus Torvalds,
        "Programming isn't about what you know; it's about what you can figure out." - Chris Pine
    );

    private final Random random = new Random();

    public String getRandomQuote() {
        return QUOTES.get(random.nextInt(QUOTES.size()));
    }
}
Java

Schauen Sie sich diese schöne Jakarta CDI-Annotation (@ApplicationScoped) an. Es ist, als ob wir unserer Klasse Superkräfte verleihen!

Schritt 4: Erstellen des Laufzeitmoduls

Als nächstes müssen wir das Laufzeitmodul einrichten. Hier geschieht die Magie, wenn jemand unsere Erweiterung tatsächlich verwendet:

package io.mycompany.quarkus.random.quote.generator.runtime;

import io.mycompany.quarkus.random.quote.generator.RandomQuoteGenerator;
import io.quarkus.arc.runtime.BeanContainer;
import io.quarkus.runtime.annotations.Recorder;

@Recorder
public class RandomQuoteGeneratorRecorder {
    public void initialize(BeanContainer container) {
        container.instance(RandomQuoteGenerator.class).getRandomQuote();
    }
}
Java

Diese Recorder-Klasse ist wie das Backstage-Team eines Theaters – sie richtet alles hinter den Kulissen ein.

Schritt 5: Bereitstellungsmodul - Wo die Teile zusammenkommen

Jetzt erstellen wir das Bereitstellungsmodul. Hier sagen wir Quarkus, wie unsere Erweiterung integriert werden soll:

package io.mycompany.quarkus.random.quote.generator.deployment;

import io.mycompany.quarkus.random.quote.generator.RandomQuoteGenerator;
import io.mycompany.quarkus.random.quote.generator.runtime.RandomQuoteGeneratorRecorder;
import io.quarkus.arc.deployment.AdditionalBeanBuildItem;
import io.quarkus.deployment.annotations.BuildStep;
import io.quarkus.deployment.annotations.ExecutionTime;
import io.quarkus.deployment.annotations.Record;
import io.quarkus.deployment.builditem.FeatureBuildItem;

class RandomQuoteGeneratorProcessor {

    private static final String FEATURE = "random-quote-generator";

    @BuildStep
    FeatureBuildItem feature() {
        return new FeatureBuildItem(FEATURE);
    }

    @BuildStep
    AdditionalBeanBuildItem registerBean() {
        return AdditionalBeanBuildItem.unremovableOf(RandomQuoteGenerator.class);
    }

    @BuildStep
    @Record(ExecutionTime.RUNTIME_INIT)
    void initialize(RandomQuoteGeneratorRecorder recorder) {
        recorder.initialize();
    }
}
Java

Dieser Prozessor ist wie der Dirigent eines Orchesters, der sicherstellt, dass alle Teile unserer Erweiterung harmonisch zusammenarbeiten.

Schritt 6: Konfiguration

Jede gute Erweiterung benötigt einige Konfigurationsoptionen. Fügen wir eine Möglichkeit hinzu, unsere Zitate anzupassen:

package io.mycompany.quarkus.random.quote.generator.runtime;

import io.quarkus.runtime.annotations.ConfigItem;
import io.quarkus.runtime.annotations.ConfigPhase;
import io.quarkus.runtime.annotations.ConfigRoot;

@ConfigRoot(name = "random-quote", phase = ConfigPhase.RUN_TIME)
public class RandomQuoteConfig {

    /**
     * Benutzerdefinierte Zitate, die dem Generator hinzugefügt werden sollen
     */
    @ConfigItem(name = "custom-quotes")
    public Optional<List<String>> customQuotes;
}
Java

Jetzt können Benutzer ihre eigenen Zitate hinzufügen. Es ist, als ob wir ihnen einen Pinsel geben, um ihre eigenen Farben zu unserem Meisterwerk hinzuzufügen!

Schritt 7: Testen - Weil wir Profis sind

Keine Erweiterung ist ohne Tests vollständig. Schreiben wir einen einfachen Test, um sicherzustellen, dass unser Generator funktioniert:

package io.mycompany.quarkus.random.quote.generator;

import io.quarkus.test.junit.QuarkusTest;
import org.junit.jupiter.api.Test;

import jakarta.inject.Inject;

import static org.junit.jupiter.api.Assertions.assertNotNull;

@QuarkusTest
public class RandomQuoteGeneratorTest {

    @Inject
    RandomQuoteGenerator generator;

    @Test
    public void testRandomQuoteGeneration() {
        String quote = generator.getRandomQuote();
        assertNotNull(quote);
        System.out.println("Generated quote: " + quote);
    }
}
Java

Tests auszuführen ist wie ein Gesundheitscheck für Ihren Code. Sicher ist sicher!

Schritt 8: Dokumentation - Weil wir nett sind

Zu guter Letzt schreiben wir etwas Dokumentation. Erstellen Sie eine README.md-Datei im Stammverzeichnis Ihres Projekts:

# Quarkus Random Quote Generator Extension

Diese Erweiterung fügt Ihrer Quarkus-Anwendung einen Zufallszitatgenerator hinzu.

## Verwendung

1. Fügen Sie die Erweiterung zu Ihrem Projekt hinzu:

```xml
<dependency>
    <groupId>io.mycompany</groupId>
    <artifactId>quarkus-random-quote-generator</artifactId>
    <version>1.0.0-SNAPSHOT</version>
</dependency>
```

2. Integrieren und verwenden Sie den Generator in Ihrem Code:

```java
@Inject
RandomQuoteGenerator generator;

public void printRandomQuote() {
    System.out.println(generator.getRandomQuote());
}
```

3. Passen Sie Zitate in Ihrer application.properties an:

```properties
quarkus.random-quote.custom-quotes=May the source be with you,I code, therefore I am
```
Markdown

Gute Dokumentation ist wie gut kommentierter Code – sie erleichtert jedem das Leben.

Das große Finale: Veröffentlichen Ihrer Erweiterung

Sie haben es geschafft! Ihre Erweiterung ist bereit, die Welt zu erobern. Um sie zu veröffentlichen:

  1. Pushen Sie Ihren Code zu GitHub
  2. Richten Sie CI/CD ein (GitHub Actions sind Ihr Freund)
  3. Veröffentlichen Sie auf Maven Central (denn Teilen ist Fürsorge)

Zusammenfassung

Und da haben Sie es – Ihre eigene Quarkus-Erweiterung, von der Idee bis zur produktionsreifen Lösung. Es ist, als hätten Sie gerade einen neuen Zauber zum Quarkus-Zauberbuch hinzugefügt. Denken Sie daran, mit großer Macht kommt... na, Sie wissen schon.

Gehen Sie nun hinaus und erweitern Sie Quarkus nach Herzenslust. Wer weiß? Ihre Erweiterung könnte der nächste große Hit im Quarkus-Ökosystem werden. Viel Spaß beim Programmieren, und mögen Ihre Builds immer erfolgreich sein!

"Der beste Code ist gar kein Code." - Jeff Atwood (aber wir machen eine Ausnahme für großartige Quarkus-Erweiterungen)