

 AWS Cloud9 不再提供給新客戶。 AWS Cloud9 的現有客戶可以繼續正常使用該服務。[進一步了解](https://aws.amazon.com/blogs/devops/how-to-migrate-from-aws-cloud9-to-aws-ide-toolkits-or-aws-cloudshell/)

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 的 Java 教學課程 AWS Cloud9
<a name="sample-java"></a>

**重要**  
如果您使用的 AWS Cloud9 開發環境由具有 2 GiB 或更多記憶體的 EC2 執行個體支援，我們建議您啟用增強型 Java 支援。這可以提供各種生產力功能的存取權，例如程式碼完成、錯誤檢查、內容特定動作以及除錯選項 (如中斷點和逐步執行)。  
如需詳細資訊，請參閱[增強對 Java 開發的支援](enhanced-java.md)。

本教學課程可讓您在 AWS Cloud9 開發環境中執行一些 Java 程式碼。

遵循本教學課程並建立此範例可能會導致您的帳戶 AWS 產生費用。其中包括 Amazon EC2 和 Amazon S3 這類服務可能的費用。如需詳細資訊，請參閱 [Amazon EC2 定價](https://aws.amazon.com/ec2/pricing/)和 [Amazon S3 定價](https://aws.amazon.com/s3/pricing/)。

**Topics**
+ [先決條件](#sample-java-prerequisites)
+ [步驟 1：安裝必要工具](#sample-java-install)
+ [步驟 2：新增程式碼](#sample-java-code)
+ [步驟 3：建置並執行程式碼](#sample-java-run)
+ [步驟 4：設定 以使用 適用於 Java 的 AWS SDK](#sample-java-sdk)
+ [步驟 5：在您的環境中設定 AWS 登入資料管理](#sample-java-sdk-creds)
+ [步驟 6：新增 AWS SDK 程式碼](#sample-java-sdk-code)
+ [步驟 7：建置並執行 AWS SDK 程式碼](#sample-java-sdk-run)
+ [步驟 8：清理](#sample-java-clean-up)

## 先決條件
<a name="sample-java-prerequisites"></a>

在您使用此範例前，請務必確認您的設定符合下列要求：
+ **您必須擁有現有的 AWS Cloud9 EC2 開發環境。**本範例假設您已具備 EC2 環境，且該環境已連線到執行 Amazon Linux 或 Ubuntu Server 的 Amazon EC2 執行個體。如果您有不同類型的環境或作業系統，您可能需要依照此範例的說明來設定相關工具。如需詳細資訊，請參閱[在 中建立環境 AWS Cloud9](create-environment.md)。
+ **您已開啟現有環境的 AWS Cloud9 IDE。**當您開啟環境時，請在 Web 瀏覽器中 AWS Cloud9 開啟該環境的 IDE。如需詳細資訊，請參閱[在 中開啟環境 AWS Cloud9](open-environment.md)。

## 步驟 1：安裝必要工具
<a name="sample-java-install"></a>

在此步驟中，您會在開發環境中安裝一組 Java AWS Cloud9 開發工具。如果您已在環境中安裝一組 Java 開發工具，例如 Oracle JDK 或 OpenJDK，您可以直接跳到 [步驟 2：新增程式碼](#sample-java-code)。此範例以 OpenJDK 8 開發，完成下列程序後您就可將此範例安裝在您的環境中。

1. 確認是否已安裝 OpenJDK 8。若要這樣做，請在 IDE AWS Cloud9 的終端機工作階段中，使用 **`-version`**選項執行 Java Runner 的命令列版本。(若要啟動新終端機工作階段，請在選單列上，選擇 **Window** (視窗)、**New Terminal** (新增終端機)。

   ```
   java -version
   ```

   依據上述命令的輸出，執行以下操作之一：
   + 如果找不到 `java` 命令的輸出狀態，請繼續此程序中的步驟 2 以安裝 OpenJDK 8。
   + 如果輸出包含以 `Java(TM)`、`Java Runtime Environment`、`Java SE`、`J2SE` 或 `Java2` 起始的值，表示沒有安裝 OpenJDK 或未設定為預設的 Java 開發工具組。繼續此程序中的步驟 2 以安裝 OpenJDK 8，然後切換為使用 OpenJDK 8。
   + 如果輸出包含以 `java version 1.8` 和 `OpenJDK` 開頭的值，請直接跳到 [步驟 2：新增程式碼](#sample-java-code)。已為此範例正確安裝 OpenJDK 8。
   + 如果輸出包含小於 `java version` 的 `1.8` 以及以 `OpenJDK` 起始的值，請繼續使用此程序中的安裝步驟 2，將已安裝的 OpenJDK 版本升級到 OpenJDK 8。

1. 確定已安裝最新的安全性更新和錯誤修正。若要這樣做，請以 **`update`** 命令執行 yum 工具 (適用於 Amazon Linux) 或 apt 工具 (適用於 Ubuntu Server)。

   針對 Amazon Linux：

   ```
   sudo yum -y update
   ```

   針對 Ubuntu Server：

   ```
   sudo apt update
   ```

1. 安裝 OpenJDK 8。若要這樣做，請以 **`install`** 命令執行 yum 工具 (適用於 Amazon Linux) 或 apt 工具 (適用於 Ubuntu Server)，並指定 OpenJDK 8 套件。

   針對 Amazon Linux：

   ```
   sudo yum -y install java-1.8.0-openjdk-devel
   ```

   針對 Ubuntu Server：

   ```
   sudo apt install -y openjdk-8-jdk
   ```

   如需詳細資訊，請參閱 OpenJDK 網站上的[如何下載和安裝預先建置的 OpenJDK 套件](https://openjdk.org/install/)。

1. 將預設的 Java 開發工具組切換或升級為 OpenJDK 8。若要這樣做，請執行 ** `update-alternatives` ** 命令與 ** `--config` **選項。執行此命令兩次，以切換或升級 Java runner 和編譯器的命令列版本。

   ```
   sudo update-alternatives --config java
   sudo update-alternatives --config javac
   ```

   在每個提示中，輸入 OpenJDK 8 的選擇號碼 (包含 `java-1.8`)。

1. 確認 Java runner 和編譯器命令列版本使用的是 OpenJDK 8。若要執行此操作，執行 Java runner 和編譯器的命令列版本並使用 `-version` 選項。

   ```
   java -version
   javac -version
   ```

   如果 OpenJDK 8 已安裝並正確設定，Java runner 版本輸出將包含以 `openjdk version 1.8` 起始的值，而且 Java 編譯器版本輸出以 `javac 1.8` 起始的值。

## 步驟 2：新增程式碼
<a name="sample-java-code"></a>

在 AWS Cloud9 IDE 中，使用下列程式碼建立檔案，並使用名稱 儲存檔案`hello.java`。(若要建立檔案，請在選單列上選擇 **File** (檔案)、**New File** (新增檔案)。若要儲存檔案，請選擇 **File** (檔案)、**Save** (儲存)。)

```
public class hello {

  public static void main(String []args) {
    System.out.println("Hello, World!");

    System.out.println("The sum of 2 and 3 is 5.");

    int sum = Integer.parseInt(args[0]) + Integer.parseInt(args[1]);

    System.out.format("The sum of %s and %s is %s.\n",
      args[0], args[1], Integer.toString(sum));
  }
}
```

## 步驟 3：建置並執行程式碼
<a name="sample-java-run"></a>

1. 使用 Java 編譯器的命令列版本，將 `hello.java` 檔案編譯為 `hello.class` 檔案。若要這樣做，請在 IDE AWS Cloud9 中使用終端機，從與 `hello.java` 檔案相同的目錄執行 Java 編譯器，指定 `hello.java` 檔案。

   ```
   javac hello.java
   ```

1. 使用 Java runner 的命令列版本執行 `hello.class` 檔案。若要這樣做，從與 `hello.class` 檔案相同的目錄執行 Java runner，並指定在 `hello` 檔案中宣告的 `hello.java` 類別的名稱，新增兩個整數 (例如，`5` 和 `9`)。

   ```
   java hello 5 9
   ```

1. 比較您的輸出。

   ```
   Hello, World!
   The sum of 2 and 3 is 5.
   The sum of 5 and 9 is 14.
   ```

## 步驟 4：設定 以使用 適用於 Java 的 AWS SDK
<a name="sample-java-sdk"></a>

您可以增強此範例，以使用 適用於 Java 的 AWS SDK 建立 Amazon S3 儲存貯體、列出可用的儲存貯體，然後刪除您剛建立的儲存貯體。

在此步驟中，您會在環境中安裝 [Apache Maven](https://maven.apache.org/) 或 [Gradle](https://gradle.org/)。Maven 和 Gradle 是通用建置自動化系統，可搭配使用 Java 專案。在安裝 Maven 或 Gradle 之後，您可以使用它來產生新的 Java 專案。在這個新專案中，您會新增 適用於 Java 的 AWS SDK的參考。這 適用於 Java 的 AWS SDK 可讓您透過 Java 程式碼與 Amazon S3 等 AWS 服務互動。

**Topics**
+ [使用 Maven 設定](#sample-java-sdk-maven)
+ [使用 Gradle 設定](#sample-java-sdk-gradle)

### 使用 Maven 設定
<a name="sample-java-sdk-maven"></a>

1. 在您的環境中安裝 Maven。若要查看是否已安裝 Maven，請使用 IDE AWS Cloud9 中的終端機，使用 **`-version`**選項執行 Maven。

   ```
   mvn -version
   ```

   如果成功，輸出會包含 Maven 版本編號。如果已安裝 Maven，請直接跳到此程序中的步驟 4，使用 Maven 在環境中產生新的 Java 專案。

1. 使用終端機執行以下命令以安裝 Maven。

   如為 Amazon Linux，您可以使用下列命令獲得存放 Maven 的套件儲存庫相關資訊，然後使用此資訊安裝 Maven。

   ```
   sudo wget http://repos.fedorapeople.org/repos/dchen/apache-maven/epel-apache-maven.repo -O /etc/yum.repos.d/epel-apache-maven.repo
   sudo sed -i s/\$releasever/6/g /etc/yum.repos.d/epel-apache-maven.repo
   sudo yum install -y apache-maven
   ```

   如需有關上述命令的詳細資訊，請參閱 Fedora Project Wiki 網站上的 [Extra Packages for Enterprise Linux (EPEL)](https://docs.fedoraproject.org/en-US/epel/)。

   對於 Ubuntu Server，改為執行下列命令。

   ```
   sudo apt install -y maven
   ```

1. 執行 Maven 並使用** `-version` **選項以確認安裝。

   ```
   mvn -version
   ```

1. 使用 Maven 產生新的 Java 專案。若要這樣做，請使用終端機從您希望 Maven 產生專案的目錄執行下列命令 (例如環境的根目錄)。

   ```
   mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
   ```

   上述命令會在環境中建立以下專案目錄結構。

   ```
   my-app
     |- src
     |   `- main
     |        `- java
     |             `- com
     |                 `- mycompany
     |                      `- app
     |                          `-App.java
     |- test
     |   `- java
     |        `- com
     |            `- mycompany
     |                 `- app
     |                     `- AppTest.java
     `- pom.xml
   ```

   如需有關上述目錄結構的詳細資訊，請參閱 Apache Maven Project 網站上的 [Maven 快速入門 Archetype](https://maven.apache.org/archetypes/maven-archetype-quickstart/) 和 [ 認識標準目錄配置](https://maven.apache.org/guides/introduction/introduction-to-the-standard-directory-layout.html)。

1. 修改專案的專案物件模型 (POM) 檔案。(POM 檔案定義 Maven 專案的設定。) 若要執行此操作，請從 **Environment** (環境) 視窗開啟 `my-app/pom.xml` 檔案。在編輯器中，使用以下程式碼取代該檔案的目前內容，然後儲存 `pom.xml` 檔案。

   ```
   <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
     <modelVersion>4.0.0</modelVersion>
     <groupId>com.mycompany.app</groupId>
     <artifactId>my-app</artifactId>
     <packaging>jar</packaging>
     <version>1.0-SNAPSHOT</version>
     <build>
       <plugins>
         <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-assembly-plugin</artifactId>
           <version>3.6.0</version>
           <configuration>
             <descriptorRefs>
               <descriptorRef>jar-with-dependencies</descriptorRef>
             </descriptorRefs>
             <archive>
               <manifest>
                 <mainClass>com.mycompany.app.App</mainClass>
               </manifest>
             </archive>
           </configuration>
           <executions>
             <execution>
               <phase>package</phase>
                 <goals>
                   <goal>single</goal>
                 </goals>
             </execution>
           </executions>
         </plugin>
       </plugins>
     </build>
     <dependencies>
       <dependency>
         <groupId>junit</groupId>
         <artifactId>junit</artifactId>
         <version>3.8.1</version>
         <scope>test</scope>
       </dependency>
       <dependency>
         <groupId>com.amazonaws</groupId>
         <artifactId>aws-java-sdk</artifactId>
         <version>1.11.330</version>
       </dependency>
     </dependencies>
   </project>
   ```

   上述 POM 檔案包含指定宣告的專案設定，例如：
   + `artifactid` 的 `my-app` 設定項目可設定專案的根目錄名稱，`group-id` 的 `com.mycompany.app` 設定項目可設定 `com/mycompany/app` 子目錄結構以及 `package` 和 `App.Java` 檔案中的 `AppTest.java` 宣告。
   + `artifactId` 的 `my-app` 設定項目與 `packaging` 的 `jar` 設定項目、`version` 的 `1.0-SNAPSHOT` 設定項目，以及 `descriptorRef` 的 `jar-with-dependencies` 設定項目，可設定 `my-app-1.0-SNAPSHOT-jar-with-dependencies.jar` 的輸出 JAR 檔案名稱。
   + `plugin` 區段宣告將建置單一 JAR，其中包含所有相依性。
   + 設定 `groupId``com.amazon.aws`和`artifactId`設定 的 `dependency`區段`aws-java-sdk`包含程式 適用於 Java 的 AWS SDK 庫檔案。要使用的 適用於 Java 的 AWS SDK 版本是以 `version` 設定宣告。若要使用不同的版本，請取代此版本編號。

直接跳到[步驟 5：在您的環境中設定 AWS 登入資料管理](#sample-java-sdk-creds)。

### 使用 Gradle 設定
<a name="sample-java-sdk-gradle"></a>

1. 在您的環境中安裝 Gradle。若要查看是否已安裝 Gradle，請在 IDE AWS Cloud9 中使用終端機，以 **`-version`**選項執行 Gradle。

   ```
   gradle -version
   ```

   如果成功，輸出會包含 Gradle 版本號碼。如果已安裝 Gradle，請直接跳到此程序中的步驟 4，使用 Gradle 在環境中產生新的 Java 專案。

1. 使用終端機執行以下命令以安裝 Gradle。這些命令安裝和執行 SDKMAN\$1 工具，然後使用 SDKMAN\$1 安裝最新版本的 Gradle。

   ```
   curl -s "https://get.sdkman.io" | bash
   source "$HOME/.sdkman/bin/sdkman-init.sh"
   sdk install gradle
   ```

   如需有關前述命令的詳細資訊，請參閱 SDKMAN\$1 網站的[安裝](https://sdkman.io/install)，以及 Gradle 網站的[使用套件軟體管理工具進行安裝](https://gradle.org/install/#with-a-package-manager)。

1. 執行 Gradle 並使用** `-version` **選項以確認安裝。

   ```
   gradle -version
   ```

1. 使用 Gradle 在環境中產生新的 Java 專案。若要這樣做，請使用終端機執行以下命令來建立專案目錄，然後切換到該目錄。

   ```
   mkdir my-app
   cd my-app
   ```

1. 執行以下命令，讓 Gradle 在環境的 `my-app` 目錄中產生新的 Java 應用程式專案。

   ```
   gradle init --type java-application
   ```

   上述命令會在環境中建立以下專案目錄結構。

   ```
   my-app
     |- .gradle
     |   `- (various supporting project folders and files)
     |- gradle
     |   `- (various supporting project folders and files)
     |- src
     |   |- main
     |   |    `- java
     |   |         `- App.java
     |   `- test
     |        `- java
     |             `- AppTest.java
     |- build.gradle
     |- gradlew
     |- gradlew.bat
     `- settings.gradle
   ```

1. 修改專案的 `AppTest.java`。(如果您不執行此操作，專案可能不會如預期建置或執行。) 若要執行此操作，請從 **Environment** (環境) 視窗開啟 `my-app/src/test/java/AppTest.java` 檔案。在編輯器中，使用以下程式碼取代該檔案的目前內容，然後儲存 `AppTest.java` 檔案。

   ```
   import org.junit.Test;
   import static org.junit.Assert.*;
   
   public class AppTest {
     @Test public void testAppExists () {
       try {
         Class.forName("com.mycompany.app.App");
       } catch (ClassNotFoundException e) {
         fail("Should have a class named App.");
       }
     }
   }
   ```

1. 修改專案的 `build.gradle` 檔案。(`build.gradle` 檔案定義 Gradle 專案的設定。) 若要執行此操作，請從 **Environment** (環境) 視窗開啟 `my-app/build.gradle` 檔案。在編輯器中，使用以下程式碼取代該檔案的目前內容，然後儲存 `build.gradle` 檔案。

   ```
   apply plugin: 'java'
   apply plugin: 'application'
   
   repositories {
     jcenter()
     mavenCentral()
   }
   
   buildscript {
     repositories {
       mavenCentral()
     }
     dependencies {
       classpath "io.spring.gradle:dependency-management-plugin:1.0.3.RELEASE"
     }
   }
   
   apply plugin: "io.spring.dependency-management"
   
   dependencyManagement {
     imports {
       mavenBom 'com.amazonaws:aws-java-sdk-bom:1.11.330'
     }
   }
   
   dependencies {
     compile 'com.amazonaws:aws-java-sdk-s3'
     testCompile group: 'junit', name: 'junit', version: '4.12'
   }
   
   run {
     if (project.hasProperty("appArgs")) {
       args Eval.me(appArgs)
     }
   }
   
   mainClassName = 'App'
   ```

   上述 `build.gradle` 檔案包含指定宣告的專案設定，例如：
   + `io.spring.dependency-management` 外掛程式用於匯入 適用於 Java 的 AWS SDK Maven 物料清單 (BOM)，以管理專案的 適用於 Java 的 AWS SDK 相依性。 `classpath`宣告要使用的版本。若要使用不同的版本，請取代此版本編號。
   +  `com.amazonaws:aws-java-sdk-s3` 包含 適用於 Java 的 AWS SDK 程式庫檔案的 Amazon S3 部分。`mavenBom` 會宣告要使用的版本。如果您要使用不同的版本，請取代此版本編號。

## 步驟 5：在您的環境中設定 AWS 登入資料管理
<a name="sample-java-sdk-creds"></a>

每次使用 適用於 Java 的 AWS SDK 來呼叫 AWS 服務時，您必須隨呼叫提供一組 AWS 登入資料。這些登入資料會判斷 是否 適用於 Java 的 AWS SDK 具有進行該呼叫的適當許可。如果登入資料未涵蓋適當許可，呼叫即會失敗。

在此步驟中，您會在環境中存放您的憑證。若要這麼做，請遵循 [AWS 服務 從 中的環境呼叫 AWS Cloud9](credentials.md) 中的指示，然後返回本主題。

如需其他資訊，請參閱 *適用於 Java 的 AWS SDK 開發人員指南*中的[設定開發用的 AWS 憑證和區域](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/setup.html#setup-credentials)。

## 步驟 6：新增 AWS SDK 程式碼
<a name="sample-java-sdk-code"></a>

在此步驟中，您會新增程式碼以與 Amazon S3 互動，藉此建立儲存貯體、列出可用的儲存貯體，然後刪除您剛建立的儲存貯體。

從 **Environment** (環境) 視窗，開啟 `my-app/src/main/java/com/mycompany/app/App.java` 檔案 (適用於 Maven) 或開啟 `my-app/src/main/java/App.java` 檔案 (適用於 Gradle)。在編輯器中，使用以下程式碼取代該檔案的目前內容，然後儲存 `App.java` 檔案。

```
package com.mycompany.app;

import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.AmazonS3Exception;
import com.amazonaws.services.s3.model.Bucket;
import com.amazonaws.services.s3.model.CreateBucketRequest;

import java.util.List;

public class App {

    private static AmazonS3 s3;

    public static void main(String[] args) {
        if (args.length < 2) {
            System.out.format("Usage: <the bucket name> <the AWS Region to use>\n" +
                    "Example: my-test-bucket us-east-2\n");
            return;
        }

        String bucket_name = args[0];
        String region = args[1];

        s3 = AmazonS3ClientBuilder.standard()
                .withCredentials(new ProfileCredentialsProvider())
                .withRegion(region)
                .build();

        // List current buckets.
        ListMyBuckets();

        // Create the bucket.
        if (s3.doesBucketExistV2(bucket_name)) {
            System.out.format("\nCannot create the bucket. \n" +
                    "A bucket named '%s' already exists.", bucket_name);
            return;
        } else {
            try {
                System.out.format("\nCreating a new bucket named '%s'...\n\n", bucket_name);
                s3.createBucket(new CreateBucketRequest(bucket_name, region));
            } catch (AmazonS3Exception e) {
                System.err.println(e.getErrorMessage());
            }
        }

        // Confirm that the bucket was created.
        ListMyBuckets();

        // Delete the bucket.
        try {
            System.out.format("\nDeleting the bucket named '%s'...\n\n", bucket_name);
            s3.deleteBucket(bucket_name);
        } catch (AmazonS3Exception e) {
            System.err.println(e.getErrorMessage());
        }

        // Confirm that the bucket was deleted.
        ListMyBuckets();

    }

    private static void ListMyBuckets() {
        List<Bucket> buckets = s3.listBuckets();
        System.out.println("My buckets now are:");

        for (Bucket b : buckets) {
            System.out.println(b.getName());
        }
    }

}
```

## 步驟 7：建置並執行 AWS SDK 程式碼
<a name="sample-java-sdk-run"></a>

若要執行上個步驟的程式碼，請從終端機執行以下命令。這些命令將使用 Maven 或 Gradle 建立專案的可執行 JAR 檔案，然後使用 Java runner 執行 JAR。JAR 會使用要在 Amazon S3 中建立的儲存貯體名稱 （例如 `my-test-bucket`)，以及在 中建立儲存貯體做為輸入 AWS 的區域 ID （例如 `us-east-2`) 來執行。

如果是 Maven，請執行下列命令。

```
cd my-app
mvn package
java -cp target/my-app-1.0-SNAPSHOT-jar-with-dependencies.jar com.mycompany.app.App my-test-bucket us-east-2
```

如果是 Gradle，請執行下列命令。

```
gradle build
gradle run -PappArgs="['my-test-bucket', 'us-east-2']"
```

將您的結果與下列輸出比較。

```
My buckets now are:

Creating a new bucket named 'my-test-bucket'...

My buckets now are:

my-test-bucket

Deleting the bucket named 'my-test-bucket'...

My buckets now are:
```

## 步驟 8：清理
<a name="sample-java-clean-up"></a>

為了避免在您完成使用此範例後持續向您的 AWS 帳戶收取費用，您應該刪除環境。如需說明，請參閱[在 中刪除環境 AWS Cloud9](delete-environment.md)。