LoginSignup
14
21

More than 5 years have passed since last update.

TomcatベースのEclipseプロジェクトをHerokuにデプロイする

Last updated at Posted at 2018-10-09

まえがき

HerokuでのJavaアプリケーションの公開方法は多種多様あるようですが、オーソドックスにローカルでTomcatを使って開発していた際に、本番環境はHerokuで、となった場合の対応メモです。

事前準備

・Pleiades All in One Eclipse リリース 2018-09(Eclipse SimRel 2018‑09に対応)
・Heroku
・Eclipseで動的Webプロジェクト(Dynamic Web Project)で"Hello World on Heroku!!"(まだローカルだけど)が表示されるところまでは確認。
devtest_heroku01.png

Heroku側の下準備

アプリケーション名を先に確保したかったのでこちらの手順が先に来ていますが、この後やっているMavenプロジェクトへの変換後でも良いです。
今回は以下のようにdevtest-herokuという名前で作成しました。
devtest_heroku02.png
次にSettingタブへ移動し、
devtest_heroku03.png
ビルドパックを指定します。
devtest_heroku04.png
今回はJavaです。
devtest_heroku05.png
追加されました。
devtest_heroku06.png

Maveプロジェクトへの変換

と言っても変換ではなくてここでは新規作成⇒コピーの方法を取ります。
まずはMavenプロジェクトの新規作成です。
devtest-herokuという名前にしました。
devtest_heroku07.png
アーキテクチャタイプは「maven-archetype-webapp」を選択します。
devtest_heroku08.png
各種パラメータはこんな感じで。
devtest_heroku09.png
作成後、いくつか手直しを行います。

ビルドパス補正

devtest_heroku10.png
プロジェクトフォルダ/src/main/javaとプロジェクトフォルダ/src/test/javaが無いよ、と言われるので、物理的に作成します。Windowsならエクスプローラ上で結構です。

JREの変更

devtest_heroku11.png
Mavenプロジェクトを作るとデフォルトはJava5のようなので、Java8を選択します。

サーバーランタイムの追加

devtest_heroku12.png
devtest_heroku13.png
devtest_heroku14.png
もしかしたらこの手順は不要かもしれませんが、私の環境ではTomcat8を利用しているのでそのランタイムを追加しました。

プロジェクト・ファセットの変更

こちらもJava5になっているので、Java8に変更します。
devtest_heroku15.png
devtest_heroku16.png

ソースコードのコピー

package:dev.localを作成後、写真のようにファイルをコピーします。
devtest_heroku17.png

pom.xmlの修正

Mavenプロジェクトを作成した段階で以下の内容のファイルが出来上がっていると思いますが、

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>dev.local</groupId>
  <artifactId>devtest-heroku</artifactId>
  <packaging>war</packaging>
  <version>0.0.1-SNAPSHOT</version>
  <name>devtest-heroku Maven Webapp</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
  <build>
    <finalName>devtest-heroku</finalName>
  </build>
</project>

以下のように
・dependenciesにサーブレットのdependencyを追加
・buildの下のpluginsを追加(Tomcatのwebapp-runner.jarを追加)
しました。

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>dev.local</groupId>
  <artifactId>devtest-heroku</artifactId>
  <packaging>war</packaging>
  <version>0.0.1-SNAPSHOT</version>
  <name>devtest-heroku Maven Webapp</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.1.0</version>
    </dependency>
  </dependencies>
  <build>
    <finalName>devtest-heroku</finalName>
    <plugins>
        <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.github.jsimone</groupId>
                                <artifactId>webapp-runner</artifactId>
                                <version>9.0.11.0</version>
                                <destFileName>webapp-runner.jar</destFileName>
                            </artifactItem>
                        </artifactItems>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
  </build>
</project>

Procfileの作成

Heroku側でのWebappのスタート時に実行される内容だそうで、中身はJavaコマンドになります。
こちらはHerokuデプロイ前に作成されればOKです。プロジェクト直下に作成します。

Procfile
web: java $JAVA_OPTS -jar target/dependency/webapp-runner.jar --port $PORT target/*.war

Mavenプロジェクトのビルド

ビルド設定になります。
pom.xmlを右クリック⇒実行⇒Mavenビルドを選択すると、下記の画面が出ますので、
赤線・赤枠内のように設定します。
devtest_heroku18.png
実行してみて"BUILD SUCCESS"が出ていれば、一旦終了です。
devtest_heroku19.png

試しにTomcatに載せてみる

ビルドが終わったらwarファイルが作成されていますので、試しにローカルのTomcatに載せてみます。
devtest_heroku20.png
ブラウザから呼んでみると、無事に表示されました。
devtest_heroku21.png

Herokuへのデプロイ

ここからはHerokuの管理コンソールのdeployタブにある手順に従います。
devtest_heroku22.png
git push heroku masterが終わったら、heroku psコマンドを叩いてみて、
Webappの状況を確認します。
devtest_heroku23.png
ブラウザでアクセスして、以下のように表示されれば完成です。
devtest_heroku24.png

終わりに

拙い手順を最後まで参照頂きありがとうございます。
Mavenプロジェクトを新規作成せずとも直接変換可能なので、そちらでやるともっと効率的かもしれません。
各種バージョンが変わればまた動きも変わるでしょうから、あくまでも現時点での手順、となるかと思います。
EclipseのHerokuプラグインとかあっても良さそうですけどね。

14
21
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
14
21