LoginSignup
1
1

More than 5 years have passed since last update.

GAE/Java8試行(その1:「Java8でWebアプリ作ってデプロイ」)

Last updated at Posted at 2018-10-01

お題

GAE(Google App Engine)を理解するために、実際に自分でアプリ作って乗せてみる。
前回はGAEの構造や特徴について簡単にまとめた。
今回は、Java8で、App Engine用にあらかじめ用意されたMavenアーキタイプでプロジェクトを作ってGAEにデプロイするところまで。

開発環境

# OS

$ cat /etc/os-release 
NAME="Ubuntu"
VERSION="17.10 (Artful Aardvark)"

# Java

$ java -version
java version "1.8.0_181"
Java(TM) SE Runtime Environment (build 1.8.0_181-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)

# Maven

$ mvn --version
Apache Maven 3.5.0
Maven home: /usr/share/maven
Java version: 1.8.0_181, vendor: Oracle Corporation
Java home: /usr/lib/jvm/java-8-oracle/jre
Default locale: ja_JP, platform encoding: UTF-8
OS name: "linux", version: "4.13.0-46-generic", arch: "amd64", family: "unix"

前提

実践

01) App Engine用のSDKを取得

01.png
02.png
03.png
以降、下記に従って使えるようセッティング
https://cloud.google.com/appengine/docs/standard/java/download?hl=ja

02) Mavenプロジェクト作成

適当なGitHubリポジトリを作る

ローカルに取得した上記リポジトリの中にMavenプロジェクトを作る

$ cd java-webapi-for-gae-study/
$ mvn archetype:generate -Dappengine-version=1.9.54 -Djava8=true -Dapplication-id=【プロジェクトID】 -Dfilter=com.google.appengine.archetypes:
[INFO] Scanning for projects...
Choose archetype:
1: remote -> com.google.appengine.archetypes:appengine-flexible-archetype (A basic Java application with Google App Engine flexible.)
2: remote -> com.google.appengine.archetypes:appengine-skeleton-archetype (A skeleton application with Google App Engine)
3: remote -> com.google.appengine.archetypes:appengine-standard-archetype (A basic Java application with Google App Engine Standard)
4: remote -> com.google.appengine.archetypes:endpoints-skeleton-archetype (A skeleton project using Cloud Endpoints Frameworks with Google App Engine Standard)
5: remote -> com.google.appengine.archetypes:guestbook-archetype (A guestbook application with Google App Engine)
6: remote -> com.google.appengine.archetypes:hello-endpoints-archetype (A simple starter application using Cloud Endpoints Frameworks with Google App Engine Standard)
7: remote -> com.google.appengine.archetypes:skeleton-archetype (Archetype with a README about Google App Engine archetypes)
Choose a number or apply filter (format: [groupId:]artifactId, case sensitive contains): : 3
Choose com.google.appengine.archetypes:appengine-standard-archetype version: 
1: 0.1.0
2: 0.1.1
3: 0.2.0
4: 0.3.0
5: 0.4.0
6: 1.0.0
7: 1.0.1
8: 1.0.2
Choose a number: 8: 
Define value for property 'groupId': com.example.sky0621
Define value for property 'artifactId': sky0621
Define value for property 'version' 1.0-SNAPSHOT: : 
Define value for property 'package' com.example.sky0621: : 
Confirm properties configuration:
groupId: com.example.sky0621
artifactId: sky0621
version: 1.0-SNAPSHOT
package: com.example.sky0621
CloudSDK_Tooling: true
appengine-version: 1.9.54
application-id: 【プロジェクトID】
java8: true
service: default
useAppEngineApi: false
useEndpoints1: false
useEndpoints2: false
useJstl: true
useObjectify: false
 Y: : Y
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 03:05 min
[INFO] Finished at: 2018-10-02T01:24:06+09:00
[INFO] Final Memory: 19M/193M
[INFO] ------------------------------------------------------------------------

※Mavenについては下記参照
http://maven.apache.org/guides/getting-started/maven-in-five-minutes.html
※Mavenを使ってのGAE用Javaプロジェクト作成については下記参照
https://cloud.google.com/appengine/docs/standard/java/tools/maven?authuser=1&hl=ja

03) ローカル環境でビルド・動作確認

ビルド

$ mvn clean install

動作確認

$ mvn appengine:run

===============================================

http://localhost:8080」

04.png

===============================================

04) GAEにデプロイ

デプロイ

$ mvn appengine:deploy
[INFO] Scanning for projects...
[WARNING] The project com.example.sky0621:sky0621:war:1.0-SNAPSHOT uses prerequisites which is only intended for maven-plugin projects but not for non maven-plugin projects. For such purposes you should use the maven-enforcer-plugin. See https://maven.apache.org/enforcer/enforcer-rules/requireMavenVersion.html
[INFO] 
[INFO] ------------------------------------------------------------------------
[INFO] Building sky0621 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------

  〜省略〜

[INFO] GCLOUD: Services to deploy:
[INFO] GCLOUD: 
[INFO] GCLOUD: descriptor:      [/work/src/java/github.com/sky0621/java-webapi-for-gae-study/sky0621/target/appengine-staging/app.yaml]
[INFO] GCLOUD: source:          [/work/src/java/github.com/sky0621/java-webapi-for-gae-study/sky0621/target/appengine-staging]
[INFO] GCLOUD: target project:  [【プロジェクトID】]
[INFO] GCLOUD: target service:  [default]
[INFO] GCLOUD: target version:  [20181002t014521]
[INFO] GCLOUD: target url:      [https://【プロジェクトID】.appspot.com]
[INFO] GCLOUD: 
[INFO] GCLOUD: 
[INFO] GCLOUD: Beginning deployment of service [default]...
[INFO] GCLOUD: #============================================================#
[INFO] GCLOUD: #= Uploading 18 files to Google Cloud Storage               =#
[INFO] GCLOUD: #============================================================#
[INFO] GCLOUD: File upload done.
[INFO] GCLOUD: Updating service [default]...
[INFO] GCLOUD: .done.
[INFO] GCLOUD: Setting traffic split for service [default]...
[INFO] GCLOUD: ........done.
[INFO] GCLOUD: Deployed service [default] to [https://【プロジェクトID】.appspot.com]
[INFO] GCLOUD: 
[INFO] GCLOUD: You can stream logs from the command line by running:
[INFO] GCLOUD:   $ gcloud app logs tail -s default
[INFO] GCLOUD: 
[INFO] GCLOUD: To view your application in the web browser run:
[INFO] GCLOUD:   $ gcloud app browse
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 01:04 min
[INFO] Finished at: 2018-10-02T01:46:13+09:00
[INFO] Final Memory: 22M/269M
[INFO] ------------------------------------------------------------------------

===============================================

「http://【プロジェクトID】.appspot.com」

05.png

===============================================

===============================================

「https://【プロジェクトID】.appspot.com」

05.png

===============================================

GCPコンソールで確認

06a.png
07.png
08.png
09.png

自動生成プロジェクトの中身

以下になる。これら全て自動生成によるもの。便利。
ついでに言うと、treeコマンドも便利。

$ tree
.
├── README.md
└── sky0621
    ├── README.md
    ├── nbactions.xml
    ├── pom.xml
    ├── sky0621.iml
    ├── src
    │   ├── main
    │   │   ├── java
    │   │   │   └── com
    │   │   │       └── example
    │   │   │           └── sky0621
    │   │   │               └── HelloAppEngine.java
    │   │   └── webapp
    │   │       ├── WEB-INF
    │   │       │   ├── appengine-web.xml
    │   │       │   ├── logging.properties
    │   │       │   └── web.xml
    │   │       └── index.jsp
    │   └── test
    │       └── java
    │           └── com
    │               └── example
    │                   └── sky0621
    │                       └── HelloAppEngineTest.java
    └── target
        ├── appengine-staging
        │   ├── WEB-INF
        │   │   ├── appengine-generated
        │   │   │   └── app.yaml
        │   │   ├── appengine-web.xml
        │   │   ├── classes
        │   │   │   ├── com
        │   │   │   │   └── example
        │   │   │   │       └── sky0621
        │   │   │   │           └── HelloAppEngine.class
        │   │   │   └── source-context.json
        │   │   ├── lib
        │   │   │   ├── _ah_compiled_jsps-0000.jar
        │   │   │   ├── jstl-1.2.jar
        │   │   │   ├── org.apache.taglibs.taglibs-standard-impl-1.2.5.jar
        │   │   │   ├── org.apache.taglibs.taglibs-standard-spec-1.2.5.jar
        │   │   │   ├── org.eclipse.jdt.core.compiler.ecj-4.4.2.jar
        │   │   │   ├── org.eclipse.jetty.apache-jsp-9.3.18.v20170406-nolog.jar
        │   │   │   ├── org.mortbay.jasper.apache-el-8.0.33.jar
        │   │   │   └── org.mortbay.jasper.apache-jsp-8.0.33.jar
        │   │   ├── logging.properties
        │   │   ├── min-quickstart-web.xml
        │   │   ├── quickstart-web.xml
        │   │   └── web.xml
        │   ├── __static__
        │   ├── app.yaml
        │   └── index.jsp
        ├── generated-sources
        │   └── annotations
        ├── generated-test-sources
        │   └── test-annotations
        ├── maven-archiver
        │   └── pom.properties
        ├── maven-status
        │   └── maven-compiler-plugin
        │       ├── compile
        │       │   └── default-compile
        │       │       ├── createdFiles.lst
        │       │       └── inputFiles.lst
        │       └── testCompile
        │           └── default-testCompile
        │               ├── createdFiles.lst
        │               └── inputFiles.lst
        ├── sky0621-1.0-SNAPSHOT
        │   ├── META-INF
        │   ├── WEB-INF
        │   │   ├── appengine-web.xml
        │   │   ├── classes
        │   │   │   └── com
        │   │   │       └── example
        │   │   │           └── sky0621
        │   │   │               └── HelloAppEngine.class
        │   │   ├── lib
        │   │   │   ├── appengine-api-1.0-sdk-1.9.54.jar
        │   │   │   ├── jstl-1.2.jar
        │   │   │   ├── org.apache.taglibs.taglibs-standard-impl-1.2.5.jar
        │   │   │   └── org.apache.taglibs.taglibs-standard-spec-1.2.5.jar
        │   │   ├── logging.properties
        │   │   └── web.xml
        │   └── index.jsp
        ├── sky0621-1.0-SNAPSHOT.war
        ├── surefire-reports
        │   ├── TEST-com.example.sky0621.HelloAppEngineTest.xml
        │   └── com.example.sky0621.HelloAppEngineTest.txt
        └── test-classes
            └── com
                └── example
                    └── sky0621
                        └── HelloAppEngineTest.class

48 directories, 47 files

まとめ

MavenとApp Engineプラグインを使うと、コマンド一発で https アクセス可能なドメインも用意された状態でWebアプリとしてデプロイされる。
とても楽。今後は、このプロジェクトにGAEの各種機能を試せるような味付けをしていく。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1