

Ini adalah Panduan Pengembang AWS CDK v2. CDK v1 yang lebih lama memasuki pemeliharaan pada 1 Juni 2022 dan mengakhiri dukungan pada 1 Juni 2023.

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Bekerja dengan AWS CDK di Jawa
<a name="work-with-cdk-java"></a>

Java adalah bahasa klien yang didukung penuh untuk AWS CDK dan dianggap stabil. Anda dapat mengembangkan aplikasi AWS CDK di Java menggunakan alat yang sudah dikenal, termasuk JDK (Oracle's, atau distribusi OpenJDK seperti Amazon Corretto) dan Apache Maven.

 AWS CDK mendukung Java 8 dan yang lebih baru. Kami merekomendasikan untuk menggunakan versi terbaru yang Anda bisa, karena versi bahasa yang lebih baru mencakup peningkatan yang sangat nyaman untuk mengembangkan aplikasi AWS CDK. Misalnya, Java 9 memperkenalkan `Map.of()` metode (cara mudah untuk mendeklarasikan hashmap yang akan ditulis sebagai literal objek). TypeScript Java 10 memperkenalkan inferensi tipe lokal menggunakan kata kunci. `var`

**catatan**  
Sebagian besar contoh kode dalam Panduan Pengembang ini bekerja dengan Java 8. Beberapa contoh digunakan`Map.of()`; contoh-contoh ini termasuk komentar yang mencatat bahwa mereka memerlukan Java 9.

Anda dapat menggunakan editor teks apa pun, atau IDE Java yang dapat membaca proyek Maven, untuk bekerja pada aplikasi AWS CDK Anda. Kami menyediakan petunjuk [Eclipse](https://www.eclipse.org/downloads/) dalam Panduan ini, tetapi IntelliJ IDEA, NetBeans, dan lainnya IDEs dapat mengimpor proyek Maven dan dapat digunakan untuk mengembangkan aplikasi CDK di Jawa. AWS 

Dimungkinkan untuk menulis aplikasi AWS CDK dalam bahasa yang dihosting JVM selain Java (misalnya, Kotlin, Groovy, Clojure, atau Scala), tetapi pengalamannya mungkin tidak terlalu idiomatis, dan kami tidak dapat memberikan dukungan apa pun untuk bahasa-bahasa ini.

## Memulai Java
<a name="java-prerequisites"></a>

Untuk bekerja dengan AWS CDK, Anda harus memiliki AWS akun dan kredensil dan telah menginstal Node.js dan CDK Toolkit. AWS Lihat [Memulai dengan AWS CDK](getting-started.md).

Aplikasi AWS CDK Java memerlukan Java 8 (v1.8) atau yang lebih baru. [Kami merekomendasikan [Amazon Corretto](https://aws.amazon.com/corretto/), tetapi Anda dapat menggunakan distribusi OpenJDK atau JDK Oracle.](https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html) Anda juga membutuhkan [Apache Maven](https://maven.apache.org/download.cgi) 3.5 atau yang lebih baru. Anda juga dapat menggunakan alat seperti Gradle, tetapi kerangka aplikasi yang dihasilkan oleh AWS CDK Toolkit adalah proyek Maven.

**catatan**  
Pengakhiran bahasa pihak ketiga: versi bahasa hanya didukung hingga EOL (End Of Life) dibagikan oleh vendor atau komunitas dan dapat berubah sewaktu-waktu dengan pemberitahuan sebelumnya.

## Membuat proyek
<a name="java-newproject"></a>

Anda membuat proyek AWS CDK baru dengan memanggil `cdk init` di direktori kosong. Gunakan `--language` opsi dan tentukan`java`:

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

 `cdk init`menggunakan nama folder proyek untuk memberi nama berbagai elemen proyek, termasuk kelas, subfolder, dan file. Tanda hubung dalam nama folder diubah menjadi garis bawah. Namun, nama tersebut harus mengikuti bentuk pengenal Java; misalnya, seharusnya tidak dimulai dengan angka atau berisi spasi.

Proyek yang dihasilkan mencakup referensi ke paket `software.amazon.awscdk` Maven. Ini dan dependensinya diinstal secara otomatis oleh Maven.

Jika Anda menggunakan IDE, Anda sekarang dapat membuka atau mengimpor proyek. **Di Eclipse, misalnya, pilih **File** > **Import > Maven > Existing** **Maven Projects**.** Pastikan bahwa pengaturan proyek diatur untuk menggunakan Java 8 (1.8).

## Mengelola AWS modul Construct Library
<a name="java-managemodules"></a>

Gunakan Maven untuk menginstal paket AWS Construct Library, yang ada di grup. `software.amazon.awscdk` Sebagian besar konstruksi berada di artefak`aws-cdk-lib`, yang ditambahkan ke proyek Java baru secara default. Modul untuk layanan yang dukungan CDK tingkat tinggi masih dikembangkan berada dalam paket “eksperimental” terpisah, dinamai dengan versi pendek (tidak ada atau awalan AWS Amazon) dari nama layanan mereka. [Cari Repositori Pusat Maven](https://search.maven.org/search?q=software.amazon.awscdk) untuk menemukan nama semua perpustakaan AWS CDK dan Construct Module. AWS 

**catatan**  
[Edisi Java dari Referensi API CDK](https://docs.aws.amazon.com/cdk/api/v2/java/index.html) juga menunjukkan nama paket.

Dukungan AWS Construct Library beberapa layanan ada di lebih dari satu namespace. Misalnya, Amazon Route 53 memiliki fungsinya dibagi menjadi`software.amazon.awscdk.route53`,`route53-patterns`,`route53resolver`, dan`route53-targets`.

Paket AWS CDK utama diimpor dalam kode Java sebagai`software.amazon.awscdk`. Modul untuk berbagai layanan di Perpustakaan AWS Konstruksi hidup di bawah `software.amazon.awscdk.services` dan diberi nama yang mirip dengan nama paket Maven mereka. Misalnya, namespace modul Amazon S3 adalah. `software.amazon.awscdk.services.s3`

Sebaiknya tulis `import` pernyataan Java terpisah untuk setiap kelas AWS Construct Library yang Anda gunakan di setiap file sumber Java Anda, dan menghindari impor wildcard. Anda selalu dapat menggunakan nama tipe yang sepenuhnya memenuhi syarat (termasuk namespace-nya) tanpa pernyataan. `import`

Jika aplikasi Anda bergantung pada paket eksperimental, edit proyek Anda `pom.xml` dan tambahkan `<dependency>` elemen baru dalam `<dependencies>` wadah. Misalnya, `<dependency>` elemen berikut menentukan modul pustaka konstruksi CodeStar eksperimental:

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

**Tip**  
Jika Anda menggunakan IDE Java, mungkin memiliki fitur untuk mengelola dependensi Maven. Namun, kami merekomendasikan untuk mengedit `pom.xml` secara langsung, kecuali Anda benar-benar yakin fungsionalitas IDE cocok dengan apa yang akan Anda lakukan dengan tangan.

## Mengelola dependensi di Java
<a name="work-with-cdk-java-dependencies"></a>

Di Java, dependensi ditentukan `pom.xml` dan diinstal menggunakan Maven. `<dependencies>`Wadah mencakup `<dependency>` elemen untuk setiap paket. Berikut ini adalah bagian dari `pom.xml` untuk aplikasi CDK Java yang khas.

```
<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>
```

**Tip**  
Banyak Java IDEs telah mengintegrasikan dukungan Maven dan `pom.xml` editor visual, yang mungkin Anda temukan nyaman untuk mengelola dependensi.

Maven tidak mendukung penguncian ketergantungan. Meskipun dimungkinkan untuk menentukan rentang versi`pom.xml`, kami sarankan Anda selalu menggunakan versi yang tepat agar build Anda tetap dapat diulang.

Maven secara otomatis menginstal dependensi transitif, tetapi hanya ada satu salinan yang diinstal dari setiap paket. Versi yang ditentukan tertinggi di pohon POM dipilih; aplikasi selalu memiliki kata terakhir dalam versi paket apa yang diinstal.

Maven secara otomatis menginstal atau memperbarui dependensi Anda setiap kali Anda membangun (`mvn compile`) atau package () proyek Anda. `mvn package` CDK Toolkit melakukan ini secara otomatis setiap kali Anda menjalankannya, jadi umumnya tidak perlu memanggil Maven secara manual.

## AWS Idiom CDK di Jawa
<a name="java-cdk-idioms"></a>

### Alat Peraga
<a name="java-props"></a>

Semua kelas AWS Construct Library dipakai menggunakan tiga argumen: *lingkup* di mana konstruksi sedang didefinisikan (induknya di pohon konstruksi), *id*, dan *props*, bundel key/value pasangan yang digunakan konstruksi untuk mengkonfigurasi sumber daya yang dibuatnya. Kelas dan metode lain juga menggunakan pola “bundel atribut” untuk argumen.

Di Jawa, alat peraga diekspresikan menggunakan [pola Builder](https://en.wikipedia.org/wiki/Builder_pattern). Setiap tipe konstruksi memiliki tipe props yang sesuai; misalnya, `Bucket` konstruksi (yang mewakili bucket Amazon S3) mengambil sebagai props sebagai instance dari. `BucketProps`

`BucketProps`Kelas (seperti setiap kelas props AWS Construct Library) memiliki kelas dalam yang disebut. `Builder` `BucketProps.Builder`Jenis ini menawarkan metode untuk mengatur berbagai properti dari sebuah `BucketProps` instance. Setiap metode mengembalikan `Builder` instance, sehingga panggilan metode dapat dirantai untuk mengatur beberapa properti. Di akhir rantai, Anda memanggil `build()` untuk benar-benar menghasilkan `BucketProps` objek.

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

Konstruksi, dan kelas lain yang mengambil objek seperti alat peraga sebagai argumen terakhir mereka, menawarkan jalan pintas. Kelas memiliki sendiri `Builder` yang membuat instance dan objek props dalam satu langkah. Dengan cara ini, Anda tidak perlu secara eksplisit membuat instance (misalnya) keduanya `BucketProps` dan `Bucket` --dan Anda tidak memerlukan impor untuk jenis alat peraga.

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

Saat menurunkan konstruksi Anda sendiri dari konstruksi yang ada, Anda mungkin ingin menerima properti tambahan. Kami menyarankan Anda mengikuti pola pembangun ini. Namun, ini tidak sesederhana mensubklasifikasikan kelas konstruksi. Anda harus menyediakan sendiri bagian yang bergerak dari dua `Builder` kelas baru. Anda mungkin lebih suka membuat konstruksi Anda menerima satu atau lebih argumen tambahan. Anda harus memberikan konstruktor tambahan ketika argumen bersifat opsional.

### Struktur generik
<a name="java-generic-structures"></a>

Dalam beberapa APIs, AWS CDK menggunakan JavaScript array atau objek yang tidak diketik sebagai input ke metode. (Lihat, misalnya, 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)metode.) Di Jawa, objek-objek ini direpresentasikan sebagai`java.util.Map<String, Object>`. Dalam kasus di mana nilai-nilai semua string, Anda dapat menggunakan`Map<String, String>`.

Java tidak menyediakan cara untuk menulis literal untuk wadah seperti yang dilakukan beberapa bahasa lain. Di Java 9 dan yang lebih baru, Anda dapat menggunakan [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…​-)untuk dengan mudah menentukan peta hingga sepuluh entri sebaris dengan salah satu panggilan ini.

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

Untuk membuat peta dengan lebih dari sepuluh entri, gunakan [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…​-).

Jika Anda menggunakan Java 8, Anda dapat memberikan metode Anda sendiri yang mirip dengan ini.

JavaScript array direpresentasikan sebagai `List<Object>` atau `List<String>` di Jawa. Metode `java.util.Arrays.asList` ini nyaman untuk mendefinisikan `List` s pendek.

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

### Nilai yang hilang
<a name="java-missing-values"></a>

Di Jawa, nilai yang hilang dalam objek AWS CDK seperti alat peraga diwakili oleh. `null` Anda harus secara eksplisit menguji nilai apa pun yang bisa `null` untuk memastikannya berisi nilai sebelum melakukan apa pun dengannya. Java tidak memiliki “gula sintaksis” untuk membantu menangani nilai nol seperti yang dilakukan beberapa bahasa lain. Anda mungkin menemukan Apache ObjectUtil [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-)dan [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…​-)berguna dalam beberapa situasi. Atau, tulis metode pembantu statis Anda sendiri untuk membuatnya lebih mudah menangani nilai nol yang berpotensi dan membuat kode Anda lebih mudah dibaca.

## Membangun dan menjalankan aplikasi CDK
<a name="java-running"></a>

 AWS CDK secara otomatis mengompilasi aplikasi Anda sebelum menjalankannya. Namun, membangun aplikasi Anda secara manual dapat berguna untuk memeriksa kesalahan dan menjalankan pengujian. Anda dapat melakukan ini di IDE Anda (misalnya, tekan Control-B di Eclipse) atau dengan mengeluarkan `mvn compile` pada prompt perintah saat berada di direktori root proyek Anda.

Jalankan pengujian apa pun yang Anda tulis dengan menjalankan `mvn test` pada prompt perintah.