java11 gaeのスタンダードエディションで 2020/07/27

ようやく移行できたのでメモ


単純なjspがサーブレットぐらいしか動かさないかなということで、移行は、単純なjettyを含むやりかたでデプロイ

以前のやりかたから、なれたとてもシンプルになっているのかもしれない。
定義は以下

例)
# [START gae_java11_servlet_yaml]
runtime: java11
entrypoint: 'java -cp "*" jp.deiji.Main deijitools_googlapp-0.0.1.war'
# [END gae_java11_servlet_yaml]

自分で定義した、Mainクラスでjettyを動かして、そこにwarを渡してあげるというものっぽい。
ローカルの実行はうまくいって、さてGAEにデプロイしたら、

java.lang.ClassNotFoundException

が発生...ため息がでつつ調べたら以下


そうだんだねーと思いつつ。

どうもローカルで実行したときとデプロイしたときで動きが違うのかどうかわからないけど

entrypoint: 'java -cp "*"
のこの部分の✴︎でmainクラスがあるjarが読まれていない。そりゃそうだ、warはでpackageでつくっていたからなのだから

そういえばsampleみてもpom.xmlのpackageはjarだったかなーと思いつつ、jarで作成したらokだったが、引数にわたすwarは?

ならば、jarとwarを同時につくればいいんじゃないということで、調べたたら以下

[java - Maven - Generate Jar and War - Stack Overflow](https://stackoverflow.com/questions/10862980/maven-generate-jar-and-war)

これでjarとwarができたけど、もうひと手間

            <!-- [START make-a-jar_plugin] -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <executions>
                    <execution>
                        <id>make-a-jar</id>
                        <phase>compile</phase>
                        <goals>
                            <goal>jar</goal>
                        </goals>
                        <configuration>
                            <!-- need! -->
                            <outputDirectory>
                                ${project.build.directory}/appengine-staging
                            </outputDirectory>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <!-- [END make-a-jar_plugin] -->
ローカルからデプロイするときにappengine-stagingからファイルをコピーしているようなので、作成したjarを入れておく必要があるぽっい。

ふーこれで一応うごいたよ。

java11




: