

Dies ist der AWS CDK v2-Entwicklerhandbuch. Das ältere CDK v1 wurde am 1. Juni 2022 gewartet und der Support wurde am 1. Juni 2023 eingestellt.

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# Arbeiten mit dem AWS CDK in Java
<a name="work-with-cdk-java"></a>

Java ist eine vollständig unterstützte Client-Sprache für das AWS CDK und gilt als stabil. Sie können AWS CDK-Anwendungen in Java mit vertrauten Tools entwickeln, darunter das JDK (das von Oracle oder eine OpenJDK-Distribution wie Amazon Corretto) und Apache Maven.

Das AWS CDK unterstützt Java 8 und höher. Wir empfehlen jedoch, die neueste Version zu verwenden, da spätere Versionen der Sprache Verbesserungen enthalten, die sich besonders für die Entwicklung von AWS CDK-Anwendungen eignen. Zum Beispiel führt Java 9 die `Map.of()` Methode ein (eine bequeme Möglichkeit, Hashmaps zu deklarieren, die als Objektliterale geschrieben würden). TypeScript Java 10 führt die Inferenz lokaler Typen mithilfe des Schlüsselworts ein. `var`

**Anmerkung**  
Die meisten Codebeispiele in diesem Entwicklerhandbuch funktionieren mit Java 8. Einige Beispiele verwenden`Map.of()`; diese Beispiele enthalten Kommentare, in denen darauf hingewiesen wird, dass sie Java 9 benötigen.

Sie können einen beliebigen Texteditor oder eine Java-IDE verwenden, die Maven-Projekte lesen kann, um an Ihren AWS CDK-Apps zu arbeiten. In diesem Handbuch finden Sie Hinweise zu [Eclipse](https://www.eclipse.org/downloads/), aber IntelliJ IDEA und andere IDEs können Maven-Projekte importieren und für die Entwicklung von AWS CDK-Anwendungen in Java verwendet werden. NetBeans

Es ist möglich, AWS CDK-Anwendungen in anderen von JVM gehosteten Sprachen als Java zu schreiben (z. B. Kotlin, Groovy, Clojure oder Scala), aber die Erfahrung ist möglicherweise nicht besonders idiomatisch, und wir können keinen Support für diese Sprachen anbieten.

## Fangen Sie mit Java an
<a name="java-prerequisites"></a>

Um mit dem AWS CDK arbeiten zu können, müssen Sie über ein AWS Konto und Anmeldeinformationen verfügen und Node.js und das AWS CDK Toolkit installiert haben. Siehe [Erste Schritte mit dem CDK](getting-started.md). AWS 

 AWS Java-CDK-Anwendungen benötigen Java 8 (v1.8) oder höher. [Wir empfehlen [Amazon Corretto](https://aws.amazon.com/corretto/), aber Sie können jede OpenJDK-Distribution oder das JDK von Oracle verwenden.](https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html) Sie benötigen außerdem [Apache](https://maven.apache.org/download.cgi) Maven 3.5 oder höher. Sie können auch Tools wie Gradle verwenden, aber die vom AWS CDK Toolkit generierten Anwendungs-Skeletons sind Maven-Projekte.

**Anmerkung**  
Veraltete Sprachversion von Drittanbietern: Die Sprachversion wird nur bis zu ihrem vom Anbieter oder der Community mitgeteilten EOL (End Of Life) unterstützt und kann sich mit vorheriger Ankündigung ändern.

## Erstellen eines Projekts
<a name="java-newproject"></a>

Sie erstellen ein neues AWS CDK-Projekt, indem Sie es in einem leeren Verzeichnis aufrufen`cdk init`. Verwenden Sie die `--language` Option und geben Sie an: `java`

```
$ mkdir my-project
$ cd my-project
$ cdk init app --language java
```

 `cdk init`verwendet den Namen des Projektordners, um verschiedene Elemente des Projekts zu benennen, einschließlich Klassen, Unterordnern und Dateien. Bindestriche im Ordnernamen werden in Unterstriche umgewandelt. Ansonsten sollte der Name jedoch die Form eines Java-Bezeichners haben; er sollte beispielsweise nicht mit einer Zahl beginnen oder Leerzeichen enthalten.

Das daraus resultierende Projekt enthält einen Verweis auf das `software.amazon.awscdk` Maven-Paket. Es und seine Abhängigkeiten werden automatisch von Maven installiert.

Wenn Sie eine IDE verwenden, können Sie das Projekt jetzt öffnen oder importieren. Wählen Sie in Eclipse beispielsweise „**Datei**“ > „**Importieren**“ > „**Maven**“ > „**Bestehende Maven-Projekte**“. Stellen Sie sicher, dass die Projekteinstellungen so eingestellt sind, dass sie Java 8 (1.8) verwenden.

## Module der AWS Construct Library verwalten
<a name="java-managemodules"></a>

Verwenden Sie Maven, um AWS Construct Library-Pakete zu installieren, die sich in der Gruppe `software.amazon.awscdk` befinden. Die meisten Konstrukte befinden sich im Artefakt`aws-cdk-lib`, das standardmäßig zu neuen Java-Projekten hinzugefügt wird. Module für Dienste, deren CDK-Unterstützung auf höherer Ebene noch in der Entwicklung ist, befinden sich in separaten „experimentellen“ Paketen, die mit einer Kurzversion (kein AWS oder Amazon-Präfix) des Namens ihres Dienstes benannt sind. [Suchen Sie im Maven Central Repository](https://search.maven.org/search?q=software.amazon.awscdk) nach den Namen aller AWS CDK- und Construct-Modulbibliotheken. AWS 

**Anmerkung**  
Die [Java-Ausgabe der CDK API Reference](https://docs.aws.amazon.com/cdk/api/v2/java/index.html) zeigt auch die Paketnamen.

Die AWS Construct Library-Unterstützung einiger Dienste erfolgt in mehr als einem Namespace. Die Funktionalität von Amazon Route 53 ist beispielsweise in`software.amazon.awscdk.route53`, `route53-patterns``route53resolver`, und unterteilt`route53-targets`.

Das AWS CDK-Hauptpaket wird im Java-Code als `software.amazon.awscdk` importiert. Module für die verschiedenen Dienste in der AWS Construct-Bibliothek befinden sich unter `software.amazon.awscdk.services` und sind ähnlich ihrem Maven-Paketnamen benannt. Der Namespace des Amazon S3 S3-Moduls lautet `software.amazon.awscdk.services.s3` beispielsweise.

Wir empfehlen, für jede AWS Construct Library-Klasse, die Sie in jeder Ihrer Java-Quelldateien verwenden, eine separate `import` Java-Anweisung zu schreiben und Platzhalter-Importe zu vermeiden. Sie können immer den vollständig qualifizierten Namen eines Typs (einschließlich seines Namespace) ohne Anweisung verwenden. `import`

Wenn Ihre Anwendung von einem experimentellen Paket abhängt, bearbeiten Sie das Ihres Projekts `pom.xml` und fügen Sie dem `<dependencies>` Container ein neues `<dependency>` Element hinzu. Das folgende `<dependency>` Element spezifiziert beispielsweise das Bibliotheksmodul für CodeStar experimentelle Konstrukte:

```
<dependency>
    <groupId>software.amazon.awscdk</groupId>
    <artifactId>codestar-alpha</artifactId>
    <version>2.0.0-alpha.10</version>
</dependency>
```

**Tipp**  
Wenn Sie eine Java-IDE verwenden, verfügt sie wahrscheinlich über Funktionen zur Verwaltung von Maven-Abhängigkeiten. Wir empfehlen jedoch, `pom.xml` direkt zu bearbeiten, es sei denn, Sie sind sich absolut sicher, dass die Funktionalität der IDE mit dem übereinstimmt, was Sie von Hand tun würden.

## Verwaltung von Abhängigkeiten in Java
<a name="work-with-cdk-java-dependencies"></a>

In Java werden Abhängigkeiten in Maven spezifiziert `pom.xml` und installiert. Der `<dependencies>` Container enthält ein `<dependency>` Element für jedes Paket. Im Folgenden finden Sie einen Abschnitt `pom.xml` für eine typische CDK-Java-App.

```
<dependencies>
    <dependency>
        <groupId>software.amazon.awscdk</groupId>
        <artifactId>aws-cdk-lib</artifactId>
        <version>2.14.0</version>
    </dependency>
    <dependency>
        <groupId>software.amazon.awscdk</groupId>
        <artifactId>appsync-alpha</artifactId>
        <version>2.10.0-alpha.0</version>
    </dependency>
</dependencies>
```

**Tipp**  
In vielen IDEs Java-Versionen sind Maven-Unterstützung und visuelle `pom.xml` Editoren integriert, die Sie möglicherweise für die Verwaltung von Abhängigkeiten als praktisch erachten.

Maven unterstützt das Sperren von Abhängigkeiten nicht. Es ist zwar möglich, Versionsbereiche anzugeben`pom.xml`, wir empfehlen jedoch, immer exakte Versionen zu verwenden, damit Ihre Builds wiederholbar bleiben.

Maven installiert automatisch transitive Abhängigkeiten, aber von jedem Paket kann nur eine Kopie installiert sein. Die Version, die im POM-Baum am höchsten angegeben ist, wird ausgewählt. Anwendungen haben immer das letzte Wort darüber, welche Version von Paketen installiert wird.

Maven installiert oder aktualisiert Ihre Abhängigkeiten automatisch, wann immer Sie Ihr Projekt erstellen (`mvn compile`) oder verpacken (`mvn package`). Das CDK Toolkit macht dies automatisch bei jeder Ausführung, sodass es im Allgemeinen nicht notwendig ist, Maven manuell aufzurufen.

## AWS CDK-Idiome in Java
<a name="java-cdk-idioms"></a>

### Props
<a name="java-props"></a>

Alle AWS Construct-Library-Klassen werden mit drei Argumenten instanziiert: dem *Bereich*, in dem das Konstrukt definiert wird (sein übergeordnetes Objekt im Konstruktbaum), einer *ID* und *props*, einem Bündel von key/value Paaren, das das Konstrukt verwendet, um die von ihm erstellten Ressourcen zu konfigurieren. Andere Klassen und Methoden verwenden ebenfalls das Muster „Bündel von Attributen“ für Argumente.

In Java werden Requisiten mit dem [Builder-Muster](https://en.wikipedia.org/wiki/Builder_pattern) ausgedrückt. Jeder Konstrukttyp hat einen entsprechenden Requisitentyp. Beispielsweise verwendet das `Bucket` Konstrukt (das einen Amazon S3 S3-Bucket darstellt) als Requisiten eine Instanz von. `BucketProps`

Die `BucketProps` Klasse hat (wie jede Requisitenklasse der AWS Construct Library) eine innere Klasse namens. `Builder` Der `BucketProps.Builder` Typ bietet Methoden, um die verschiedenen Eigenschaften einer `BucketProps` Instanz festzulegen. Jede Methode gibt die `Builder` Instanz zurück, sodass die Methodenaufrufen verkettet werden können, um mehrere Eigenschaften festzulegen. Am Ende der Kette rufen Sie auf, `build()` um das `BucketProps` Objekt tatsächlich zu erzeugen.

```
Bucket bucket = new Bucket(this, "amzn-s3-demo-bucket", new BucketProps.Builder()
                           .versioned(true)
                           .encryption(BucketEncryption.KMS_MANAGED)
                           .build());
```

Konstrukte und andere Klassen, deren letztes Argument ein Objekt ist, das an Requisiten erinnert, bieten eine Abkürzung. Die Klasse hat eine eigene, `Builder` die sie und ihr Props-Objekt in einem Schritt instanziiert. Auf diese Weise müssen Sie nicht explizit (zum Beispiel) sowohl als auch ein `Bucket` --instanziieren `BucketProps` und Sie benötigen auch keinen Import für den Typ Requisiten.

```
Bucket bucket = Bucket.Builder.create(this, "amzn-s3-demo-bucket")
                           .versioned(true)
                           .encryption(BucketEncryption.KMS_MANAGED)
                           .build();
```

Wenn Sie Ihr eigenes Konstrukt aus einem vorhandenen Konstrukt ableiten, möchten Sie möglicherweise zusätzliche Eigenschaften akzeptieren. Wir empfehlen Ihnen, diese Builder-Muster zu befolgen. Dies ist jedoch nicht so einfach wie die Unterteilung einer Konstruktklasse. Sie müssen die beweglichen Teile der beiden neuen `Builder` Klassen selbst bereitstellen. Möglicherweise ziehen Sie es vor, dass Ihr Konstrukt einfach ein oder mehrere zusätzliche Argumente akzeptiert. Sie sollten zusätzliche Konstruktoren angeben, wenn ein Argument optional ist.

### Generische Strukturen
<a name="java-generic-structures"></a>

In einigen APIs Fällen verwendet das AWS CDK JavaScript Arrays oder untypisierte Objekte als Eingabe für eine Methode. (Siehe zum Beispiel die Methode.) AWS CodeBuild [https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_codebuild.BuildSpec.html#static-fromwbrobjectvalue](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_codebuild.BuildSpec.html#static-fromwbrobjectvalue) In Java werden diese Objekte dargestellt als`java.util.Map<String, Object>`. In Fällen, in denen es sich bei den Werten ausschließlich um Zeichenketten handelt, können Sie Folgendes verwenden`Map<String, String>`.

Java bietet keine Möglichkeit, Literale für solche Container zu schreiben, wie dies in einigen anderen Sprachen der Fall ist. In Java 9 und höher können Sie [https://docs.oracle.com/javase/9/docs/api/java/util/Map.html#ofEntries-java.util.Map.Entry…​-](https://docs.oracle.com/javase/9/docs/api/java/util/Map.html#ofEntries-java.util.Map.Entry…​-)damit bequem Zuordnungen mit bis zu zehn Einträgen innerhalb eines dieser Aufrufe definieren.

```
java.util.Map.of(
    "base-directory", "dist",
    "files", "LambdaStack.template.json"
 )
```

Um Karten mit mehr als zehn Einträgen zu erstellen, verwenden Sie [https://docs.oracle.com/javase/9/docs/api/java/util/Map.html#ofEntries-java.util.Map.Entry…​-](https://docs.oracle.com/javase/9/docs/api/java/util/Map.html#ofEntries-java.util.Map.Entry…​-).

Wenn Sie Java 8 verwenden, könnten Sie Ihre eigenen Methoden bereitstellen, die diesen ähneln.

JavaScript Arrays werden `List<String>` in Java als `List<Object>` oder dargestellt. Die Methode `java.util.Arrays.asList` ist praktisch, um kurze `List` s zu definieren.

```
List<String> cmds = Arrays.asList("cd lambda", "npm install", "npm install typescript")
```

### Fehlende Werte
<a name="java-missing-values"></a>

In Java werden fehlende Werte in AWS CDK-Objekten wie Requisiten durch dargestellt. `null` Sie müssen jeden beliebigen Wert explizit testen, `null` um sicherzustellen, dass er einen Wert enthält, bevor Sie etwas damit anfangen. Java hat keinen „syntaktischen Zucker“, der beim Umgang mit Nullwerten hilft, wie es in einigen anderen Sprachen der Fall ist. Möglicherweise finden Sie ObjectUtil Apache [https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/ObjectUtils.html#defaultIfNull-T-T-](https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/ObjectUtils.html#defaultIfNull-T-T-)und in einigen Situationen [https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/ObjectUtils.html#firstNonNull-T…​-](https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/ObjectUtils.html#firstNonNull-T…​-)nützlich. Alternativ können Sie Ihre eigenen statischen Hilfsmethoden schreiben, um den Umgang mit potenziell Nullwerten zu vereinfachen und Ihren Code lesbarer zu machen.

## CDK-Anwendungen erstellen und ausführen
<a name="java-running"></a>

Das AWS CDK kompiliert Ihre App automatisch, bevor sie ausgeführt wird. Es kann jedoch nützlich sein, Ihre App manuell zu erstellen, um nach Fehlern zu suchen und Tests durchzuführen. Sie können dies in Ihrer IDE tun (drücken Sie beispielsweise Strg-B in Eclipse) oder indem Sie es `mvn compile` an einer Befehlszeile eingeben, während Sie sich im Stammverzeichnis Ihres Projekts befinden.

Führen Sie alle Tests aus, die Sie geschrieben haben, indem Sie sie `mvn test` an einer Befehlszeile ausführen.