Apache Maven と App Engine プラグインの使用(Cloud SDK ベース)

このページでは、ソフトウェア プロジェクトの管理および確認ツール Apache Maven を使用して App Engine プロジェクトを管理する方法を説明します。このツールを使って App Engine にデプロイするウェブ アプリケーション アーカイブ(WAR)ファイルをビルドできます。 Google では、Maven 3.5 以降でサポートされる、プラグインと Maven アーキタイプを提供しています。

Maven は App Engine SDK から Java ライブラリをダウンロードします。Maven を使用してアプリをローカルでテストし、App Engine にデプロイできます。

始める前に

  1. Google Cloud Console を使用して、Cloud プロジェクトを作成、設定します。
    App Engine に移動
    1. 新しい Cloud プロジェクトを選択または作成します。
    2. プロジェクト用の App Engine アプリケーションを作成する必要がある場合は、指示に従い、App Engine アプリケーションを配置するリージョンを選択します。
  2. Java がない場合は、Java をダウンロードし、インストールして構成します。
  3. プロジェクトの pom.xml で Java コンパイラ フラグを設定して、Java 8 バイトコードを指定します。
    Java 8
    <properties>
      <maven.compiler.source>1.8</maven.compiler.source>
      <maven.compiler.target>1.8</maven.compiler.target>
    </properties>
  4. Maven 3.5 以降がインストールされている必要があります。Maven 3.5 以降がインストールされているかどうかを確認するには、次のコマンドを実行します。
     mvn -v
  5. Maven 3.5 以降がインストールされていない場合:
    1. Maven ウェブサイトから Maven 3.5 以降をダウンロードします
    2. ローカルマシンに Maven 3.5 以降をインストールします

      注: Linux ユーザーが Maven 3.5 以降をインストールするには、apt-get install を使用する代わりに Maven をダウンロードしなければならない場合があります。

  6. Cloud SDK をインストールする必要はありません。SDK は、必要に応じてプラグインにより自動的にインストールされます。

App Engine Maven プラグインを既存のプロジェクトに追加する(省略可)

Google App Engine Maven プラグインを既存の Maven プロジェクトで使用するには、プロジェクトの pom.xml ファイルの plugins セクションに次の内容を追加します。

<plugin>
   <groupId>com.google.cloud.tools</groupId>
   <artifactId>appengine-maven-plugin</artifactId>
   <version>2.2.0</version>
</plugin>

App Engine アーキタイプの選択

Maven アーキタイプを使用すると、一般的な使用事例を想定したテンプレートを使って Maven プロジェクトを作成できます。App Engine では、この Maven の機能を活用するために、便利な App Engine アーキタイプをいくつか Maven Central で提供しています。アプリに適した App Engine アーキタイプを選択してください。

アプリケーションの種類 アーティファクト 説明
App Engine アプリ appengine-skeleton-archetype 独自のクラスとリソースを利用できる、必要なファイルとディレクトリが含まれた新しい空の App Engine プロジェクトを生成します。
App Engine アプリ appengine-standard-archetype App Engine スタンダード環境用の基本的な Java アプリケーションを生成します。
App Engine アプリ appengine-flexible-archetype App Engine フレキシブル環境用の基本的な Java アプリケーションを生成します。

Maven を使用した新しいプロジェクトの作成

Maven でプロジェクトを作成する際、プロジェクトの groupIdartifactIdversionpackage を指定するよう求められます。

用語 意味
groupId アーティファクトの追跡に使用される、Maven 内での名前空間。プロジェクトが他のユーザーの Maven プロジェクトに使用される場合、依存性を指定する際に属性として使用されます。
artifactId Maven 内でのプロジェクト名。他のユーザーが自分の Maven プロジェクトでこのプロジェクトに依存する場合も、このプロジェクト名が指定されます。
version プロジェクトの生成に使用する Maven の初期バージョン。versionに接尾辞-SNAPSHOTを付けることをおすすめします。これにより、開発中のバージョンの Maven リリース プラグインでサポートされるようになります。詳しくは、Maven Release Plugin の使用方法に関するガイドをご覧ください。
package 生成時に作成される Java パッケージ。

新しい App Engine アプリの作成

次の手順では、appengine-skeleton-archetype を使用して App Engine アプリを作成する方法について説明します。

App Engine Maven アーキタイプを使用して App Engine アプリを作成するには:

  1. プロジェクトをビルドするディレクトリに移動します。

  2. 次の Maven コマンドを実行します。

    mvn archetype:generate -Dappengine-version=1.9.59 -Dapplication-id=[YOUR-PROJECT-ID] -Dfilter=com.google.appengine.archetypes:
    

    -Dappengine-version を App Engine SDK for Java の最新バージョンに設定し、application-id を Cloud プロジェクトの ID に設定します。

  3. 独自のクラスに必要なディレクトリ構造とファイルを含む空のプロジェクトを作成する場合は、com.google.appengine.archetypes:appengine-skeleton-archetype に対応する番号を指定します。

  4. デフォルト値を受け入れて、表示された利用可能なアーキタイプ バージョンのリストから最新バージョンを選択します。

  5. Define value for property 'groupId'」と表示されたら、アプリの名前空間を指定します(com.mycompany.myapp など)。

  6. Define value for property 'artifactId'」と表示されたら、プロジェクト名を指定します(myapp など)。

  7. Define value for property 'version'」と表示されたら、デフォルト値を受け入れます。

  8. Define value for property 'package'」と表示されたら、希望するパッケージ名を指定します(またはデフォルト値を受け入れます)。生成される Java ファイルには、ここで指定するパッケージ名が付けられます。

  9. 選択した内容を確認するよう促されたら、デフォルト値(Y)を受け入れます。

  10. プロジェクトの生成が完了するまで待ってから、新しいプロジェクト ディレクトリ(myapp/ など)に移動します。

  11. 次のコマンドを実行してプロジェクトをビルドします。

        mvn clean package
    
  12. プロジェクトがビルドされるまで待ちます。プロジェクトのビルドが正常に終了すると、次のようなメッセージが表示されます。

        [INFO] --------------------------------------------------
        [INFO] BUILD SUCCESS
        [INFO] --------------------------------------------------
        [INFO] Total time: 1:16.656s
        [INFO] Finished at: 2016-08-04T16:18:24-07:00
        [INFO] Final Memory: 16M/228M
        [INFO] --------------------------------------------------
    
  13. appengine-skeleton-archetype アーティファクトを使って新しい空のアプリを作成した場合:

    1. アプリ用のクラスのコードを作成する前に、基本的なプロジェクトのレイアウトと必要なプロジェクト ファイルが完成していることを確認します。プロジェクトを作成したディレクトリに、myappというサブディレクトリがあります。これには、pom.xmlファイル、src/main/java サブディレクトリ、およびsrc/main/webapp/WEB-INFサブディレクトリが含まれています。

      Maven プロジェクトのレイアウト

      • src/main/java/... には独自のアプリケーション Java クラスを追加します。
      • アプリケーションの構成にはファイル src/main/webapp/WEB-INF/appengine-web.xml を使います。
      • アプリケーション デプロイの構成にはファイル src/main/webapp/WEB-INF/web.xml を使います。
    2. アプリケーションの Java クラスを作成し、src/main/java/... に追加します。 詳しくは、スタートガイドをご覧ください。

    3. アプリのユーザーに提供する UI を追加します。詳しくは、アプリケーション コードと UI を追加するをご覧ください。

    4. プロジェクトの作成に使用したアーティファクトでは src/main/webapp/WEB-INF/appengine-web.xml の基本的な構成が完了しています。 ただし、詳細設定を行うには、このファイルの編集が必要になることがあります。 詳しくは、appengine-web.xml を使用して構成するをご覧ください。

    5. ファイル src/main/webapp/WEB-INF/web.xml を編集して、URL をアプリハンドラにマッピングし、認証やフィルタなどを指定します。詳しくは、デプロイ記述子をご覧ください。

Maven プロジェクトの管理、テスト、デプロイ

プロジェクトをコンパイルしてビルドする

Maven App Engine アーキタイプを使用して作成したアプリケーションをビルドするには:

  1. プロジェクトのメイン ディレクトリに移動します。

  2. Maven を起動します。

    mvn clean package
    
  3. プロジェクトがビルドされるまで待ちます。プロジェクトのビルドが正常に終了すると、次のようなメッセージが表示されます。

    BUILD SUCCESS
     Total time: 10.724s
     Finished at: 2016-08-04T16:18:24-07:00
     Final Memory: 24M/213M
    
  4. 必要に応じて、以下の手順に従ってアプリケーションをテストします。

開発用サーバーを使用してアプリケーションをテストする

開発フェーズでは、App Engine Maven プラグインを起動することによって、開発用サーバーでいつでもアプリケーションを実行してテストできます。

App Engine アプリをテストするには:

  1. アプリをまだビルドしていない場合はビルドします。

    mvn clean package
    
  2. ディレクトリをプロジェクトの最上位(myapp など)に変更し、Maven を起動します。

    mvn appengine:run
    

    サーバーが起動するまで待ちます。サーバーが完全に起動してアプリケーションが実行中になると、次のようなメッセージが表示されます。

    [INFO] GCLOUD: INFO: Module instance default is running at http://localhost:44180/
    [INFO] GCLOUD: Jul 29, 2016 9:23:55 PM com.google.appengine.tools.development.AbstractModule startup
    [INFO] GCLOUD: INFO: The admin console is running at http://localhost:44180/_ah/admin
    [INFO] GCLOUD: Jul 29, 2016 9:23:55 PM com.google.appengine.tools.development.devappserver2.DevAppServer2Impl doStart
    [INFO] GCLOUD: INFO: Dev App Server is now running
    
  3. ブラウザで http://localhost:8080/ にアクセスしてアプリを表示します。

  4. Ctrl+C キーを押して、アプリケーションと開発サーバーをシャットダウンします。

ローカルテスト用のポートを指定する

ローカルの開発用サーバーでアプリケーションを実行する場合、デフォルトのポートは 8080 です。appengine-maven-plugin のプラグイン エントリを変更して、このデフォルト値を変更できます。たとえば、次のように、アプリケーション ディレクトリの pom.xml ファイルでポートとアドレスを指定できます。

<plugins>
   <plugin>
     <groupId>com.google.cloud.tools</groupId>
     <artifactId>appengine-maven-plugin</artifactId>
     <version>2.2.0</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 package appengine:deploy -Dapp.deploy.projectId=PROJECT_ID

PROJECT_ID は実際の Cloud プロジェクトの ID に置き換えます。pom.xml ファイルですでにプロジェクト ID を指定している場合は、実行するコマンドに -Dapp.deploy.projectId プロパティを含める必要はありません。

App Engine Maven プラグインの appengine:deploy ゴールと他のすべてのゴールには、使用可能なパラメータが関連付けられています。すべてのゴールとパラメータのリストについては、App Engine Maven プラグインのゴールとパラメータをご覧ください。

次のステップ