herokuにTomcat-Webアプリをデプロイする
数年ぶりに Heroku に Webアプリをデプロイしたので、メモしておく。
デプロイしたのは、Tomcat9 で動作するWebアプリである。
- ターゲット: Tomcat9、Java11
- 動的Webモジュールバージョン: 4.0
手順として参考にしたのは、以下。
Webapp Runner を使用した Tomcat ベースの Java Web アプリケーションのデプロイ
ていうか、この手順通りにおこなった。
この手順は、Eclipseではなさそうなので、ターミナルで作業した。
maven プロジェクトを作成
適当なディレクトリにて、アプリのディレクトリを作成し、その中で、 mavenプロジェクトを作成した。
$ mkdir heroku-app
$ cd heroku-app
$ mvn archetype:generate -DarchetypeArtifactId=maven-archetype-webapp
いろいろ問われるので、以下のように答えた。
groupId | com.billies_works |
artifactId | indean-poker |
version | <Enter> |
package | <Enter> |
Y: : | <Enter> |
すると、ビルドが始まり、indean-poker というディレクトリができる。
$ tree -F ./
./
└── indean-poker/
├── pom.xml
└── src/
└── main/
├── resources/
└── webapp/
├── WEB-INF/
│ └── web.xml
└── index.jsp
pom.xml の修正
pom.xml を以下のようにした。
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.billies_works</groupId>
<artifactId>indean-poker</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<name>indean-poker Maven Webapp</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
<scope>provided</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.servlet.jsp/javax.servlet.jsp-api -->
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.2.1-b03</version>
<scope>provided</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.servlet.jsp.jstl/jstl-api -->
<dependency>
<groupId>javax.servlet.jsp.jstl</groupId>
<artifactId>jstl-api</artifactId>
<version>1.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.glassfish.web/jstl-impl -->
<dependency>
<groupId>org.glassfish.web</groupId>
<artifactId>jstl-impl</artifactId>
<version>1.2</version>
<scope>runtime</scope>
</dependency>
</dependencies>
<build>
<finalName>indean-poker</finalName>
<plugins>
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.2</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals><goal>copy</goal></goals>
<configuration>
<artifactItems>
<artifactItem>
<groupId>com.heroku</groupId>
<artifactId>webapp-runner</artifactId>
<version>9.0.52.1</version>
<destFileName>webapp-runner.jar</destFileName>
</artifactItem>
</artifactItems>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
上記中、<maven.compiler.source> と <maven.compiler.target> は 最初 11 を指定したのだけれど、Heroku でのビルドでエラーが出たので 1.8 にした。
また、javax.servlet.api を 3.0.1 にしているが、これは、以前使っていた pom.xmlからコピペしただけなので、このままになっている。4.0.1 も使える のかもしれない。後日確かめたい。
web.xml
web.xml は、オリジナルのもののままだと EL式が使えないので、以下にした。
src/main/webapp/WEB-INF/web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
</web-app>
上記の pom.xml だと servlet.api を 3.0.1 にしているので、3.0 に するべきだったかも。
このへん、Maven についてあまり知らないので、ちぐはぐなところがあるかも しれない。
できあがりファイル構成
できあがりは、以下である。
$ tree -F ./ | c2a0space
./
└── indean-poker/
├── pom.xml
└── src/
└── main/
├── java/
│ └── com/
│ └── billies_works/
│ ├── filter/
│ │ └── EncFilter.java
│ ├── listener/
│ │ ├── CardSetListener.java
│ │ ├── PlayerInit.java
│ │ └── SetContextPathListener.java
│ ├── model/
│ │ ├── Card.java
│ │ ├── CardComparator.java
│ │ ├── Player.java
│ │ └── Poker.java
│ ├── servlet/
│ │ ├── Bet.java
│ │ ├── Bout.java
│ │ ├── Giveup.java
│ │ ├── GoodBy.java
│ │ ├── Play.java
│ │ └── Remake.java
│ └── util/
│ ├── Const.java
│ └── Game.java
├── resources/
└── webapp/
├── WEB-INF/
│ ├── jsp/
│ │ ├── aside.jsp
│ │ ├── empty.jsp
│ │ ├── footer.jsp
│ │ ├── goodby.jsp
│ │ ├── header.jsp
│ │ ├── play.jsp
│ │ └── result.jsp
│ ├── lib/
│ └── web.xml
├── css/
│ └── style.css
├── favicon.ico
├── img/
│ ├── cardBack.png
│ ├── club1.png
│ ├── club10.png
│ ├── club11.png
│ ├── club12.png
│ ├── club13.png
│ ├── club2.png
│ ├── club3.png
│ ├── club4.png
│ ├── club5.png
│ ├── club6.png
│ ├── club7.png
│ ├── club8.png
│ ├── club9.png
│ ├── diamond1.png
│ ├── diamond10.png
│ ├── diamond11.png
│ ├── diamond12.png
│ ├── diamond13.png
│ ├── diamond2.png
│ ├── diamond3.png
│ ├── diamond4.png
│ ├── diamond5.png
│ ├── diamond6.png
│ ├── diamond7.png
│ ├── diamond8.png
│ ├── diamond9.png
│ ├── face_boy1.png
│ ├── face_boy2.png
│ ├── face_boy3.png
│ ├── face_boy4.png
│ ├── face_boy5.png
│ ├── furikaeru_boy.png
│ ├── heart1.png
│ ├── heart10.png
│ ├── heart11.png
│ ├── heart12.png
│ ├── heart13.png
│ ├── heart2.png
│ ├── heart3.png
│ ├── heart4.png
│ ├── heart5.png
│ ├── heart6.png
│ ├── heart7.png
│ ├── heart8.png
│ ├── heart9.png
│ ├── joker.png
│ ├── lose_boy.png
│ ├── spade1.png
│ ├── spade10.png
│ ├── spade11.png
│ ├── spade12.png
│ ├── spade13.png
│ ├── spade2.png
│ ├── spade3.png
│ ├── spade4.png
│ ├── spade5.png
│ ├── spade6.png
│ ├── spade7.png
│ ├── spade8.png
│ ├── spade9.png
│ ├── tobokeru_boy.png
│ └── win_boy.png
├── index.jsp
└── js/
└── poker.js
mvn package を実行
ここで、ビルドを実行する。
$ mvn package
すると、無事 BUILD SUCCESS と出る。
アプリケーションの実行
以下のコマンドでアプリケーションを実行する。
$ java -jar target/dependency/webapp-runner.jar target/*.war
これで http://localhost:8080/ でアプリにアクセスできる。
Heroku へのデプロイ
プロジェクトのトップディレクトリに、以下のファイルを作成する。
Procfile
web: java $JAVA_OPTS -jar target/dependency/webapp-runner.jar --port $PORT target/*.war
Git にコミットして、アプリを作成し、デプロイする。
$ git init
$ git add .
$ git commit -m "Ready to deploy"
$ heroku create
$ git push heroku master
これで、動作している。
以下のコマンドで、ブラウザで表示できる。
$ heroku open
今回のアプリの URL は以下である。
https://blooming-waters-78333.herokuapp.com/
Herokuアプリの更新手順
herokuアプリのソースの修正のあと、以下の手順で更新できる。
$ git add .
$ git commit -m "code is modified."
$ git push heroku master
参考
カテゴリー: Java, memo
タグ: heroku, java, jsp, servlet, tomcat
カウント: 225