このページでは、Apache Maven を使用して Cloud Endpoints Frameworks API の App Engine プロジェクトを管理する方法について説明します。Apache Maven は、ソフトウェア プロジェクトの管理と確認を行うツールで、App Engine にデプロイするウェブ アプリケーション アーカイブ(WAR)ファイルをビルドできます。Google では、Maven 3.3.9 以上でサポートされる、プラグインと Maven アーキタイプを提供しています。
Maven は App Engine SDK から Java ライブラリをダウンロードします。Maven を使用してアプリをローカルでテストし、App Engine にデプロイできます。
始める前に
-  Google Cloud コンソールを使用して、 Google Cloud プロジェクトを作成して設定します。
 - Google Cloud プロジェクトを選択するか、新規作成します。
- プロジェクト用の App Engine アプリケーションを作成する必要がある場合は、指示に従い、App Engine アプリケーションを配置するリージョンを選択します。
 
- gcloud CLI をダウンロードしてインストールしてから、Google Cloud CLI を初期化します。Google Cloud CLI をすでにインストールしていて、初期化時とは異なる Google Cloud プロジェクト ID を使用するように設定する場合は、gcloud CLI 構成の管理をご覧ください。 
- gcloud CLI app-engine-javaコンポーネントをインストールします。gcloud components install app-engine-java 注: gcloud CLI for Java の最新バージョンを使用できるようにするには、 gcloud components updateを実行してください。
- Java がない場合は、Java をダウンロードし、インストールして構成します。
- プロジェクトの pom.xmlで Java コンパイラ フラグを設定して、Java 8 バイトコードを指定します。
- Apache Maven 3.3.9 以降がインストールされている必要があります。
Maven のバージョンを確認するには、次のコマンドを実行します。
mvn -v 
- 適切なバージョンの Maven がインストールされていない場合は、次の手順に従ってインストールします。
App Engine Maven プラグインを既存のプロジェクトに追加する(省略可)
App Engine Maven プラグインを既存の Maven プロジェクトで使用するには、プロジェクトの pom.xml ファイル内の plugins セクションに次の内容を追加します。
<plugin>
   <groupId>com.google.cloud.tools</groupId>
   <artifactId>appengine-maven-plugin</artifactId>
   <version>2.8.1</version>
</plugin>App Engine アーキタイプの選択
Maven アーキタイプを使用すると、一般的な使用事例を想定したテンプレートを使って Maven プロジェクトを作成できます。App Engine では、この Maven の機能を活用して、便利な App Engine アーキタイプをいくつか Maven Central で提供しています。アプリに適した App Engine アーキタイプを選択してください。
| アプリケーションの種類 | アーティファクト | 説明 | 
|---|---|---|
| Endpoints Frameworks for App Engine | endpoints-skeleton-archetype | 独自のクラスとリソースを利用できる、必要なファイルとディレクトリが含まれた新しい空の Endpoints Frameworks for App Engine のバックエンド API プロジェクトを生成します。 | 
| Endpoints Frameworks for App Engine | hello-endpoints-archetype | ビルドして実行することができる、スターター Endpoints Frameworks for App Engine のバックエンド API プロジェクトを生成します。 | 
Maven を使用した新しいプロジェクトの作成
Maven でプロジェクトを作成する際、プロジェクトの groupId、artifactId、version、package を指定するよう求められます。
| 用語 | 意味 | 
|---|---|
| groupId | アーティファクトの追跡に使用される、Maven 内での名前空間。プロジェクトが他のユーザーの Maven プロジェクトに使用される場合、依存性を指定する際に属性として使用されます。 | 
| artifactId | Maven におけるプロジェクト名。この値も、他のユーザーが自分の Maven プロジェクトをこのプロジェクトに依存させる場合に指定されます。 | 
| version | プロジェクトの生成に使用する Maven の初期バージョン。 versionに接尾辞-SNAPSHOTを付けることをおすすめします。これにより、開発中のバージョンを Maven Release Plugin でサポートできます。詳しくは、Maven Release Plugin の使用方法に関するガイドをご覧ください。 | 
| package | 生成時に作成される Java パッケージ。 | 
新しい Endpoints Frameworks アプリケーションの作成
このセクションでは、新しい Endpoints Frameworks バージョン 2.0 プロジェクトの作成について説明します。
hello-endpoints-archetype で、App Engine Maven プラグインと Endpoints Frameworks Maven プラグインなどのプラグインの使用例を確認できます。
hello-endpoints-archetype によって、Endpoints Frameworks バージョン 2.0 を使用した Greetings API の例が生成されます。また、Endpoints Frameworks バージョン 1.0 アプリケーションを Endpoints Frameworks バージョン 2.0 に移行する例として、これを使用することもできます。
アーキタイプで生成された README.md には、移行がどこで発生したかに関する情報が示されます。
Endpoints Frameworks for App Engine のバックエンド API アーキタイプ プロジェクトを作成するには、次の手順に沿って操作します。
- プロジェクトをビルドするディレクトリに移動します。 
- 次の Maven コマンドを実行します。 - mvn archetype:generate -Dgoogle-cloud-project=[YOUR-PROJECT-ID] -Dappengine-plugin=2.8.1 -Dendpoints-frameworks=2.1.0 -Dendpoints-plugin=1.0.2 -Dappengine-sdk=1.9.98 -Dfilter=com.google.appengine.archetypes:- ここで - -Dgoogle-cloud-projectは、プロジェクト ID に設定されます。
- -Dappengine-pluginは、App Engine Maven プラグインの最新バージョンに設定されます。
- -Dendpoints-frameworksは、Maven 依存関係用の Endpoints Frameworks for App Engine の最新バージョンに設定されています。
- -Dendpoints-pluginは、Endpoints Frameworks for App Engine Maven プラグインの最新バージョンに設定されています。
 
- hello-endpoints-archetypeに対応する番号を指定します。
- 表示された利用可能なアーキタイプ バージョンのリストから最新バージョンを選択します。 
- 「 - Define value for property 'groupId'」と表示されたら、アプリの名前空間を指定します(- com.example.helloendpointsなど)。
- 「 - Define value for property 'artifactId'」と表示されたら、プロジェクト名を指定します(- helloendpointsなど)。
- 「 - Define value for property 'version'」と表示されたら、デフォルト値を受け入れます。
- 「 - Define value for property 'package'」と表示されたら、デフォルト値を受け入れます。
- 選択した内容を確認するよう促されたら、「 - Y」と入力してデフォルト値を受け入れます。
- プロジェクトの生成が完了するまで待ってから、新しいプロジェクト ディレクトリ( - helloendpoints/など)に移動します。
- プロジェクトをビルドします。 - mvn clean package
- プロジェクトがビルドされるのを待ちます。プロジェクトが正常に終了すると、次のようなメッセージが表示されます。 - [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 4.062 s [INFO] Finished at: 2017-02-28T00:28:03-08:00 [INFO] Final Memory: 27M/485M [INFO] ------------------------------------------------------------------------
- ローカルでテストし、App Engine スタンダード環境にプロジェクトをデプロイする場合は、Maven プロジェクトの管理、テスト、デプロイをご覧ください。 
- さらに、次のように Endpoints Frameworks Maven Plugin を使用して、Greeting API 用の Java クライアント ライブラリを生成することもできます。 - mvn endpoints-framework:clientLibs
次の図は、Greetings API の基本的なプロジェクト レイアウトを示しています。

- README.mdには、生成された例に関する情報が含まれています。
- Greetings.javaには、Greetings API の例の API 定義が含まれています。
- Constants.javaには、Greetings API の例で使用される定数が含まれています。
- HelloGreeting.javaには、Greetings API の例で送受信されるメッセージのコンテナが含まれています。
- index.htmlには、バックエンドの Greetings API を呼び出すためのシンプルな UI が含まれています。
- base.jsには、UI によるバックエンド リクエストに必要な JavaScript が含まれています。
- build.gradleが生成されると、この例では Gradle もサポートされるようになり、この機能に関する詳細が- README.mdに生成されます。
アプリケーションのコンパイルとビルド
Maven App Engine アーキタイプを使用して作成したアプリケーションをビルドするには、次の手順に沿って操作します。
- プロジェクトのメイン ディレクトリ( - guestbook/など)に移動します。
- Maven を実行します。 - mvn clean package
- プロジェクトがビルドされるのを待ちます。プロジェクトが正常に終了すると、次のようなメッセージが表示されます。 - BUILD SUCCESS Total time: 10.724s Finished at: 2016-08-04T16:18:24-07:00 Final Memory: 24M/213M
開発用サーバーを使用してアプリケーションをテストする
開発フェーズでは、App Engine Maven プラグインを起動することによって、開発用サーバーでいつでもアプリケーションを実行してテストできます。
Endpoints Frameworks for App Engine アプリをテストするには:
- アプリをまだビルドしていない場合はビルドします。 - mvn clean package
- サンプルをローカルで実行します。 - mvn appengine:run- サーバーが起動するまで待ちます。サーバーが完全に起動してアプリケーションが実行中になると、次のようなメッセージが表示されます。 - [INFO] GCLOUD: INFO ### devappserver2.py:764] Skipping SDK update check. [INFO] GCLOUD: INFO ### api_server.py:268] Starting API server at: http://localhost:34199 [INFO] GCLOUD: INFO ### dispatcher.py:199] Starting module "default" running at: http://localhost:8080 [INFO] GCLOUD: INFO ### admin_server.py:116] Starting admin server at: http://localhost:8000 [INFO] GCLOUD: ### com.google.appengine.tools.development.SystemPropertiesManager setSystemProperties
- ブラウザで - http://localhost:8080/に移動して、アプリにアクセスします。
- Control+Cキーを押して、アプリケーションと開発サーバーをシャットダウンします。
ローカルテスト用のポートを指定する
ローカルの開発用サーバーでアプリケーションを実行する場合、デフォルトのポートは 8080 です。appengine-maven-plugin のプラグイン エントリを変更して、このデフォルト値を変更できます。たとえば、次のように、アプリケーション ディレクトリの pom.xml ファイルでポートとアドレスを指定できます。
<plugins>
   <plugin>
     <groupId>com.google.cloud.tools</groupId>
     <artifactId>appengine-maven-plugin</artifactId>
     <version>2.8.1</version>
     <configuration>
       <devserver.host>0.0.0.0</devserver.host>
       <devserver.port>8181</devserver.port>
     </configuration>
  </plugin>
</plugins>この例では、<devserver.port> にはデフォルトの代わりにポート 8181 を指定し、アドレス 0.0.0.0 を指定しています。これにより、開発用サーバーがローカル ネットワークからのリクエストをリッスンします。
接頭辞 devserver はオプションで、この代わりに <port>8181</port> を使用できます。
開発サーバーをデバッグする
ローカルに実行されているアプリケーションをデバッグするには、次の例のように、プラグイン構成に jvmFlags を設定して、基礎となる JVM でデバッグを有効にします。
<configuration>
  <jvmFlags>
    <jvmFlag>-Xdebug</jvmFlag>
    <jvmFlag>-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005</jvmFlag>
  </jvmFlags>
</configuration>
アプリケーションをデプロイする
アプリケーションをデプロイするには:
mvn appengine:deploy
App Engine Maven プラグインの appengine:deploy ゴールと他のすべてのゴールには、使用可能なパラメータが関連付けられています。すべてのゴールとパラメータのリストについては、App Engine Maven プラグインのゴールとパラメータをご覧ください。
次のステップ
- GitHub で、プラグインのコードを調べて問題を報告する。
- App Engine Maven のゴールとパラメータで、ゴールのパラメータを指定する方法を確認する。
- GitHub で Endpoints Framework Maven プラグインのコードを調べて問題を報告する。
- Cloud Endpoints Frameworks Maven プラグインで、ゴールのパラメータを指定する方法を確認する。