Apache Maven はプロジェクト管理の包括的なツールです。App Engineに配置するためのWARファイルを構築できます。 App Engineチームは開発をスピードアップさせるためにプラグインと Mavenアーキタイプを両方用意しています。
マネージドVMでMavenを使用するには、以下を行う必要があります:
まだインストールしていない場合は、Mavenのダウンロードとインストールをします。バージョンは 3.1 以降が必須です。
あなたのPCにGoogle Cloud SDKをインストールします。 新しい Maven プラグインのゴールではビルド時にGoogle Cloud SDKを自動的にダウンロードしません App Engine Managed VMコンポーネントがインストールされた最新版(ベータ以降)をインストールするようにしてください。
Cloud SDK app-engine-java コンポーネントをインストールします:
gcloud components update app-engine-java
必ず Java 7を使用してください。Java 7を持っていない場合は、 ダウンロードしてインストールしてください。 For App Engine Managed VMs images, it is possible to use Java 8 with some customization.
JAVA_HOME
環境変数を設定します。あなたが bash
ユーザーの場合は、以下を考慮してください:
通常のLinux でのインストールの場合、.bashrc
ファイルに以下のような行を追加してください:
export JAVA_HOME=/usr/local/tools/java/jdk1.7.0_45.jdk
Mac OS X と既定のターミナルアプリを使用している場合、既定ではシェルのセッションは.bashrc
を読み込みません。
そのため、.bash_profile
に以下のような行を追加する必要があります:
[ -r ~/.bashrc ] && source ~/.bashrc
Mac OS X を使用して既定のターミナルアプリを使用していない、例えば tmuxのようなターミナルアプリを使用している場合は、
.bashrc
ファイルに以下のような行を追加する必要があります。:
export JAVA_HOME=$(/usr/libexec/java_home -v1.7)
Java Managed VM サンプルコードを使いながらチュートリアルを読み始めたい場合は、 GitHub プロジェクト: https://github.com/GoogleCloudPlatform/appengine-java-vm-guestbook-extrasを使用できます
既存のMaven プロジェクトにCloud SDK App Engine Maven プラグインを追加するには、プロジェクトのpom.xml
ファイルのplugins
項目に以下を追加します:
<plugin>
<groupId>com.google.appengine</groupId>
<artifactId>gcloud-maven-plugin</artifactId>
<version>2.0.9.72.v20150804</version>
</plugin>
pom.xml
ファイルを設定したMaven を使ってJava App Engineウェブアプリケーションをビルドするには:
pom.xml
ファイルの directory の項目を、あなたのプロジェクトのメインディレクトリ(例えばguestbook/
)に変更します
以下のように Maven を起動します:
mvn clean install
プロジェクトがビルドされるのを待ちます。プロジェクトのビルドが成功すると、以下のようなメッセージが表示されます:
BUILD SUCCESS
Total time: 10.724s
Finished at: Mon Jul 14 14:50:06 PST 2014
Final Memory: 24M/213M
次の項目で説要するように、必要に応じてCloud SDKデベロップメントサーバーを使い、ローカルでアプリケーションの実行とテストを行います。
開発フェイズの間は、Cloud SDK App Engine Mavenプラグインを起動することで、デベロップサーバー上でいつでもアプリのテストと実行を行えます。
デベロップサーバでアプリを実行するには:
まだの場合はあなたのアプリをビルドします:
mvn clean install
カレントディレクトリをあなたのプロジェクトの最上階層(例えばmyapp
) へ変更してアプリを実行し、以下の用のMavenを起動してください。:
$ mvn gcloud:run
サーバが起動するまで待ち、ブラウザを使って http://localhost:8080/
を開き、アプリにアクセスします。
Windows/Linuxでは、ターミナルウィンドウ上でControl+Cキーを押して、アプリとデベロップメントサーバをシャットダウンします。 Macでは、CMD+Cキーを押します。
The App Engine Maven plugin goals have been extended to work with a local Cloud SDK installation that enable Managed VMs development and deployment. 以降の項目で、これらゴールの一覧を記載します。
以下がCloud SDK App Engine デベロップメントサーバのゴールになります:
ゴール | 説明 |
---|---|
gcloud:run |
Runs the Beta Cloud SDK App Engine development server for Managed VMs applications as well as non Managed VMs application. |
gcloud:run_start |
デベロップメントサーバを非同期で実行し、コマンドラインに戻ります。
When this goal runs, the behavior is the same as the run goal except that Maven continues processing goals and exits after the server is up and running. |
gcloud:stop |
デベロップメントサーバを停止させます。gcloud:start でデベロップメントサーバを起動した場合のみ使用できます。 |
Available parameters for all gcloud:* goals:
パラメータ | 説明 |
---|---|
gcloud_directory |
使用する Cloud SDK の Maven内での位置。 (既定値は ~/google-cloud-sdk ) |
gcloud app runのコマンドラインフラグに対応した使用可能なパラメータ:
パラメータ | 説明 |
---|---|
admin_host |
管理サーバを起動するためのホストとポート (host:portの形式) |
allow_skipped_files |
Make files specified in the app.yaml "skip_files" or "static" clauses readable by the application. |
api_host |
デベロップメントサーバ用のAPI サーバを起動するためのホストとポート (host:port の形式)。boot2dockerを使用している場合は必要ありません。 |
appidentity_email_address |
Email address associated with a service account that has a downloadable key. May be None for no local application identity. |
appidentity_private_key_path |
サービスアカウントに関連付けられた非公開キーファイル(.pem 形式)へのパス。 appidentity_email_address が設定されている場合は必ず設定しなければなりません。 |
auth_domain |
使用する承認ドメインの名前 |
blobstore_path |
blob のコンテンツを保存するのに使われるディレクトリへのパス(設定されていない場合は、storage_path のサブディレクトリが既定値として設定されます) |
clear_datastore |
起動時にデータストアをクリアします |
datastore_consistency_policy |
The policy to apply when deciding whether a datastore write should appear in global queries (default is "time") |
datastore_path |
データストアのコンテンツを保存するのに使用されるファイルへのパス (設定されていない場合、storage_path 内のファイルが既定値として設定されます) |
default_gcs_bucket_name |
既定のGoogle Cloud ストレージ バケット名 |
enable_sendmail |
Mail APIを使用してEメールを送信するための、"sendmail"ツールを使用します (ignored if smtp_host is set) |
host |
ローカルのウェブサーバを起動するためのホストとポート(host:portの形式) |
jvm_flag |
アプリのインスタンスを起動する時にJavaコマンドへ渡す追加の引数。複数設定することができます。例: <jvm_flag><param>-Xmx1024m</param> <param>-Xms256m</param></jvm_flag> 注意: これは Java Managed VMs アプリケーション用ではありません。その場合は Dockerfile を使用してください。 |
log_level |
ターミナルに表示されるアプリログの最小詳細度 (debug, info, warning, critical, error)。 現在の詳細度設定が既定値になります。 |
logs_path |
リクエストログを保存するのに使われるファイルへのパス (設定されていない場合、storage_path 内のファイルが既定値として設定されます) |
max_module_instances |
特定のモジュールのために起動することができるランタイムインスタンスの最大数 - 値は数値型になります。全てのモジュールがこのインスタンス数の制限を受けるか、もしくは module:max_instances形式のコンマ区切りで一覧を指定します。 例えば、 default:5,backend:3 |
php_executable_path |
PHP モジュールを実行するのに使用する、 PHP executableへのフルパス。 |
python_startup_script |
新しいPythonランタイムインスタンスの起動時に実行されるスクリプト(debuggersのようにツールで便利です) |
require_indexes |
Generate an error on datastore queries that require a composite index not found in index.yaml |
show_mail_body |
Mail APIを使って送信されたEメールの中身をログに記録する |
smtp_allow_tls |
SMTP サーバがTLS サポートを通知して来た場合にTLS の使用を許可する( --smtp-host が設定されていなかった場合は無視されます) |
smtp_host |
Mail APIを使って送信されるEメールを送信するために使われるSMTPサーバのホストとポート。host:portの形式 |
smtp_password |
smtp_host で指定したSMTPサーバへ接続する時に使用されるパスワード |
smtp_user |
smtp_host で指定したSMTPサーバへ接続する時に使用されるユーザー名 |
storage_path |
アプリケーションデータを保存する既定の場所。 Can be overridden for specific kinds of data using datastore_path , blobstore-path , and/or logs_path |
use_mtime_file_watcher |
ソースコードの変更を検知するためのポーリングに使用する mtime - 分散ファイルシステムを使ってリモートマシンからコードを編集する場合に便利です |
non_docker_mode |
ローカルの実行でDocker を使用するかしないかを制御するBoolean型の値。現在の既定値は true。 |
custom_entrypoint |
Specify an entrypoint for custom runtime modules. This is required when such modules are present. Include "{port}" in the string (without quotes) to pass the port number in as an argument. For instance: --custom_entrypoint="gunicorn -b localhost:{port} mymodule:application" |
以下のこれらの設定のうちいくつかを使用する例です:
<plugin>
<groupId>com.google.appengine</groupId>
<artifactId>gcloud-maven-plugin</artifactId>
<version>>2.0.9.72.v20150804</version>
<configuration>
<gcloud_directory>/usr/foo/private/google-cloud-sdk</gcloud_directory>
<verbosity>debug</verbosity>
<version>specific_version</version>
<set_default>true</set_default>
<log_level>info</log_level>
<max_module_instances>2</max_module_instances>
</configuration>
</plugin>
ゴールgcloud:deploy
を使ってApp Engineアプリケーションの配置ができます。
$ mvn gcloud:deploy
使用可能なパラメータ。gcloud app deploy のコマンドラインフラグに対応:
パラメータ | 説明 |
---|---|
compile-encoding |
Java のソースファイルをコンパイルする時に使用されるエンコードを設定します (既定値は "UTF-8") |
delete_jsps |
コンパイル後に JSP ソースファイルを削除する |
disable_jar_jsps |
Do not jar the classes generated from JSPs |
enable_jar_classes |
Jar the WEB-INF/classes content |
enable_jar_splitting |
大きな jar ファイル (32M以上) を小さく分割します |
env_vars |
アプリの環境変数を上書きします。 |
force |
Force deploying, overriding any previous in-progress deployments to this version. |
jar_splitting_excludes |
When enable-jar-splitting is specified and jar_splitting_excludes specifies a comma-separated list of suffixes, a file in a jar whose name ends with one of the suffixes will not be included in the split jar fragments |
no_symlinks |
Javaアプリのアップロードで使用される一時(staging) ディレクトリを作成する時に、シンボリックリンクを使用しません。 |
retain_upload_dir |
Javaアプリのアップロードで使用される一時(staging) ディレクトリを削除しません |
server |
接続する App Engine サーバ。通常はこの値を変更する必要はありません。 |
set_default |
Set the deployed version to be the default serving version. |
version |
この配置によって作成や置き換えが行われるアプリのバージョン。 |
gcloud_project |
The project-id that owns the app that is being created or replaced by this deployment. |
remote |
リモートdocker ホストを使ってアプリの配置をする場合にこのオプションを使用します。 |
アプリケーションとプロジェクトを管理するためのゴールを以下表に一覧で記載します:
ゴール | 説明 |
---|---|
gcloud:module_cancel_deployment |
現在のアプリ配置をキャンセル(ロールバック) します。何らかの理由でアプリの配置を中断したい時に便利です。 |
gcloud:module_delete |
appengine-web.xml 似定義されているモジュールを削除します。 |
gcloud:module_set_default |
モジュールを既定として設定します。 |
gcloud:module_set_managed_by |
指定されたバックエンドを設定します。 |
gcloud:module_start |
appengine-web.xml に定義されているモジュールを起動します。 |
gcloud:module_stop |
appengine-web.xml に定義されているモジュールを停止します。 |
gcloud app modules のコマンドラインフラグに対応した使用可能なパラメータ:
パラメータ | 説明 |
---|---|
server |
接続する App Engine サーバ。通常はこの値を変更する必要はありません。 |
version |
この配置によって作成や置き換えが行われるアプリのバージョン。 |
pom.xmlを希望する設定に編集するのではなく、mvn コマンドライン上で全ての設定パラメータを定義することもできます。
以下はシンプルな-Dgcloud.PARAM_NAME=PARAM_VALUE
のパターンです。
例えば:
# To start the development server with debug flag:
$ mvn gcloud:run -Dgcloud.verbosity=debug
# To start the development server listening to 0.0.0.0 so it can be accessed outside of localhost:
$ mvn gcloud:run -Dgcloud.host=0.0.0.0:8081
# To specify a non default Cloud SDK installation directory:
$ mvn gcloud:run -Dgcloud.gcloud_directory=YOUR_OWN_SPECIFIC_INSTALLATION_PATH
# To specify the project ID and version at deployment time:
$ mvn gcloud:deploy -Dgcloud.gcloud_project=myproject -Dgcloud.version=myversion
war 形式やear形式の App Engineプロジェクト上でCloud SDK Maven プラグインを使用することができます。