QuarkusでUber Jar(依存を全て含む実行可能Jarファイル)をビルドするには
application.properties内に以下のエントリを置いておく。
quarkus.package.type=uber-jar
ファイル名は”[artifactId]-[version]-runner.jar”になる。例えば以下のpom.xmlのような設定だと”frontend-1.0-SNAPSHOT-runner.jar”が生成される。
<artifactId>frontend</artifactId> <version>1.0-SNAPSHOT</version> java -jar target/frontend-1.0-SNAPSHOT-runner.jar
このjarファイルは@QuarkusMainアノテーションの付いたクラスを発見してMANIFEST.MFのMain-Classエントリも記載してくれているので、
% java -jar target/frontend-1.0-SNAPSHOT-runner.jar
で実行可能。@QuarkusMainの前に何か処理をしたい場合はquarkus.package.main-classでメインクラスを指定することも可能。
バージョン名などを付けたくない場合は以下のように /build/finalName で指定すればsamuraism-frontend-runner.jarという名前になる。
… </dependencies> <build> <finalName>samuraism-frontend</finalName> <plugins> …
“-runner”が気に食わなければapplication.propertiesで以下のようにquarkus.package.runner-suffixで指定できる(空にはできない)。
quarkus.package.runner-suffix=-launcher
Quarkusはデフォルトでポート8080でリスンするが、Herokuにデプロイする場合は環境変数$PORTで指定するポートでリスンする必要がある。@QuarkusMainでアノテートしたメインクラスで環境変数を読み取ってシステムプロパティquarkus.http.portにセットしても良いが、application.propertiesに以下のように書いておくだけで良い。
quarkus.http.port=${PORT:8080}
これは環境変数$PORTから読み取った値をquarkus.http.portにセット、環境変数が設定されていない場合はデフォルト値として8080を渡すという意味で、MicroprofileのProperty Expressionの仕様に基づく書き方。
コマンドラインからUber JarをデプロイするにはHeoku CLIにjavaプラグインをインストールして、deploy:jarコマンドでデプロイする。JDKバージョンは–jdkオプションで指定できる(指定の無い場合はJava 8)
以下は “samuraism-frontend-launchar.jar”を、Java 11で、samuraism-stagingアプリにデプロイする場合。
% heroku plugins:install java % heroku deploy:jar samuraism-frontend-launcher.jar --jdk 11 --app samuraism-staging
親ディレクトリからtarget/samuraism-frontend-launcher.jarと相対パスで指定した場合は正常にデプロイできなかった。(今日たまたま調子が悪かっただけかも)
デプロイやその後の様子を見たければ logs -tailコマンド:
% heroku logs -tail --app samuraism-staging
eclipse/microprofile-config MicroProfile Configuration Feature
Heroku Dev Center | Deploying Executable JAR Files – Using the Heroku Java CLI plugin