Spring BootのWebアプリをherokuで動かす

  • 最近、herokuで個人プロジェクトのWebアプリを作って遊んでます。
  • 今回は、その中でSpring Bootの形式で作ったWebアプリを動かすときにやったことを記録したので、メモ代わりにここに挙げておきます。

参考

Heroku公式解説「Deploying Spring Boot Applications to Heroku」

Deploying Spring Boot Applications to Heroku | Heroku Dev Center

GitHub - kissaten/spring-boot-heroku-demo: Demo project showing how to deploy a Spring Boot application to Heroku

書籍

spring-boot-maven-plugin

Spring Boot Maven Plugin – Usage

  • herokuのjava開発では、デフォルトではMavenを使ってビルドします。
  • ここでは、Mavenプラグイン「spring-boot-maven-plugin」を利用して、herokuのProfileファイルに指定する実行可能なjarファイルを作成します。

  • 下記の設定を追加することで、dependencyに指定したjarを含む実行可能なjarを作成してくれます。

<build>
  <plugins>
   <plugin>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-maven-plugin</artifactId>
   </plugin>
  </plugins>
</build>

Profile

  • 作成した実行可能なjarファイルの実行コマンドを記述します。
web: java -Dserver.port=$PORT -jar  target/〜.jar

[注意]ローカルのjarファイルを利用する場合

セントラルリポジトリにないjarファイル(社内開発など)を利用する場合は、systemスコープではなくローカルリポジトリを利用します。 systemスコープのjarはspring-boot-maven-pluginで収集してもらえません。

ローカルのjarを配置したローカルリポジトリを作成し、それをpom.xmlにて指定してビルドすることで、spring-boot-maven-pluginがビルド時に実行可能なjarに含めてくれます。

Adding Unmanaged Dependencies to a Maven Project | Heroku Dev Center

  1. プロジェクトルートにrepoディレクトリを作成します。

  2. 以下のMavenコマンドを実行します。

mvn deploy:deploy-file -Durl=file:///%プロジェクトルートのパス%/repo -Dfile=%ローカルのjarファイルへのパス% -DgroupId=%GROUP_ID% -DartifactId=%ARTIFACT_ID%-Dpackaging=jar -Dversion=%VERSION%
  1. pom.xmlにrepoディレクトリを指定します。
<repositories>
    <!--other repositories if any-->
    <repository>
        <id>project.local</id>
        <name>project</name>
        <releases>
        <checksumPolicy>ignore</checksumPolicy>
    </releases>
        <url>file:${project.basedir}/repo</url>
    </repository>
</repositories>