こんにちわ、みけです。
なんかgithubでブログやってたのですが、
なんかoctopressが調子悪くて、はてなで書くことにしました。
それ以前に僕が調子悪いですけど…
Gradleでherokuにアプリケーションをデプロイする
Gradle herokuで検索をするとGradleで作ったアプリケーションを
herokuにデプロイする方法が出てきます。
ただ、まあ、なんというか、みんなJetty embbededを使ってstatic void main
から
始まるアプリケーションが多かったので、
オーソドックスなservletアプリケーションをjetty-runner
で走らせる方法を
簡潔にまとめました。
…
もう既にJava好きな皆さんにとっては、なんというかもう常識的なことなので、
ここに書いてあることは当たり前なのかもしれませんが…
以下、必要なファイル毎に書いていきます。
- build.gradle
- Procfile
- system.properties
build.gradle
Herokuでjetty-runnerでwebアプリを動かす場合に注意する点は次のとおりです
gradle wrapper
を実行しておく
実行するgradle
のバージョンを一致させるために
gradle wrapper
を実行しておきます。
$ gradle wrapper
これで、プロジェクトのディレクトリーにgradlew
が作成されていることを確認しておきます。
jetty
プラグインを使う
これは別にwar
プラグインでも構いませんが、
ローカルで動かしてテストしたいだろうと思いますので、
jetty
プラグインを使います。
apply plugin : 'jetty'
providedCompile
configurationでjetty-runner
を指定する
jetty-runner
でHerokuアプリを走らせますので、
providedCompile
configurationでjetty-runner
を指定しておきます。
repositories { mavenCentral() } dependencies { compile 'javax.servlet:javax.servlet-api:3.1.0' providedCompile ('org.eclipse.jetty:jetty-runner:9.2.0.v20140526') { exclude module : 'javax.servlet-api' } testCompile 'junit:junit:4.11' }
また、jetty-runner
をディレクトリー指定してダウンロードさせるために、
Copy
タイプのタスクを作成します。
task copyJetty (type : Copy) { into "$buildDir/jetty" from configurations.providedCompile }
stage
タスクを用意する
HerokuでのGradleアプリケーションはstage
タスクにてアプリケーションのビルドをします。
そのため、stage
タスクに実行させておきたいタスクを記述しておきます。
task stage (dependsOn : ['clean', 'copyJetty']) stage.finalizedBy build
上記で作成したcopyJetty
タスクは何故かファイルを上書きしてしまったので、
task finalizationで最終的にbuild
タスクを実行させます。
(Copy
で上書きしない方法があったはずだけど、長年のブランクで忘れた)
これらをまとめたbuild.gradle
は次のとおり
apply plugin : 'jetty' repositories { mavenCentral() } dependencies { compile 'javax.servlet:javax.servlet-api:3.1.0' providedCompile ('org.eclipse.jetty:jetty-runner:9.2.0.v20140526') { exclude module : 'javax.servlet-api' } testCompile 'junit:junit:4.11' } task copyJetty (type : Copy) { into "$buildDir/jetty" from configurations.providedCompile } task stage (dependsOn : ['clean', 'copyJetty']) stage.finalizedBy build
Procfile
Procfile
にはアプリケーション実行のコマンドを記述しておきます。
(あまりよくわかってない…)
最初、僕はこのファイルでgradleのjettyRunWar
を
実行させようとしていたのですが、見事にコケました。
web: java $JAVA_OPTS -jar build/jetty/jetty-runner-9.2.0.v20140526.jar --port $PORT build/libs/*.war
またherokuのgradlewで作成されるwarファイルも、
なんかランダムな文字列になっているので、
warファイル指定にワイルドカードを使っています。
system.properties
ここにはJavaのバージョンを指定します。
僕はJava8を使いたかったのでjava8を指定します。
java.runtime.version=1.8
herokuへのアプリケーションのデプロイ
herokuへのデプロイは皆さんが御存知の通りで、
僕が説明するまでのことはないでしょう。
- toolbeltをインストールする
- herokuアカウントを作成する
- herokuにssh-keyを登録する
- heroku側にアプリケーションを作成する
- herokuにpushする
heroku側にアプリケーションを作成するために、次のコマンドを打ちます
$ heroku create
herokuにpushするために次のコマンドを打ちます
$ git push heroku master
これでアプリケーションのデプロイが完了します。