■ はじめに
ScalaのモジュールをJARファイル化して JAVAしか入っていない環境で実行するってことをやっていて 意外と手間取ったので、メモ。
目次
【1】前提条件 1)sbt 含む Scala 環境 2)sbtプラグイン「sbt-assembly」 【2】JAR作成 1)作成コマンド例 【3】JAR実行 【4】おまけ:JARコマンド 1)JAR ファイルの内容を一覧表示 2)JAR ファイルの抽出 3)JAR ファイルの更新 4)JAR ファイルの解凍 5)JAR ファイルの作成
【1】前提条件
1)sbt 含む Scala 環境
* sbt 含む Scala 環境が設定されていること => 設定されていない場合は、以下の関連記事を参照のこと
Scala ~ 環境構築編 ~
https://dk521123.hatenablog.com/entry/2023/03/10/193805
Scala ~ 環境構築編 / IntelliJ IDEA in WSL ~
https://dk521123.hatenablog.com/entry/2023/06/10/034839
SDKMAN ~ 環境構築編 ~
https://dk521123.hatenablog.com/entry/2023/08/13/000000
2)sbtプラグイン「sbt-assembly」
* sbtプラグイン「sbt-assembly」が設定されていること => sbtプラグイン「sbt-assembly」については、以下の関連記事を参照のこと
SBT ~ sbtプラグイン ~
https://dk521123.hatenablog.com/entry/2023/01/25/000000
【2】JAR作成
* 依存関連のJAR込み込みのJAR(Fat jar)の作成 * 作成時でのエラーなどのトラブルは、以下の関連記事を参照のこと
SBTでのエラー/警告対応
https://dk521123.hatenablog.com/entry/2023/04/06/093458
1)作成コマンド例
# [1] 一旦クリア sbt clean # [2] JAR作成 sbt assembly # [2]' 引数を付与したい場合(-D<KEY>=<VALUE>) sbt -Dxx=xxx assembly # 複数の場合 sbt -Dxx=xxx -Dyy=yyy assembly
出力ファイル先
実行後にプロジェクトから target/scala-x.xx (x.xxはScalaバージョン e.g. scala-2.12) 配下にJARファイルが作成されているはず
【3】JAR実行
# 作成したJARファイルが「xxxx.jar」の場合 java -jar xxxx.jar
【4】おまけ:JARコマンド
JARファイルは、結局、ZIPファイルなので 拡張子 *.jar を *.zip に返れば、中身は確認できるが コマンドでもできるので、メモ
https://qiita.com/rita_cano_bika/items/f810c27e66946367444d
https://itechblog.hatenablog.com/entry/2019/12/17/2019-12-17-155907/
公式サイト
https://docs.oracle.com/javase/jp/1.5.0/tooldocs/windows/jar.html
1)JAR ファイルの内容を一覧表示
jar tf [JAR_FILE_NAME.jar] jar tf ./target/scala-2.12/xxx.jar
2)JAR ファイルの抽出
jar xf [JAR_FILE_NAME.jar]
jarファイルの中身一部分を抽出
# v が増えた jar -xvf [JAR_FILE_NAME.jar] [TARGET_FILE_NAME] [TARGET_DIR]
3)JAR ファイルの更新
jar u[v0M]f jarfile [-C dir] inputfiles [-Joption] # xxxx.jar に scala-library-2.12.17.jar を追加する場合 jar -uf xxxx.jar scala-library-2.12.17.jar # なお、 # jar -uf xxxx.jar ./libs/scala-library-2.12.17.jar # とした場合、追加
4)JAR ファイルの解凍
jar xf xxxxx.jar
5)JAR ファイルの作成
jar cmf manifestjarfile [-C dir] inputfiles[-Joption]
使用上の注意
c: JARファイル作成(Create?) m: Manifastファイル f: Jar File指定
https://qiita.com/maple_syrup/items/a2f21fe356fa5f06bf44
mオプションとfオプションの記載順は決まっていないが、 cmfならばmanifest jarfile、cfmならjarfile manifestというように、 後続の引数の順番を合わせる必要がある。
関連記事
SBT ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2023/03/22/000000
SBT ~ 基本編 / build.sbt ~
https://dk521123.hatenablog.com/entry/2023/01/27/000000
SBT ~ 基本編 / sbtコマンド ~
https://dk521123.hatenablog.com/entry/2023/01/26/000000
SBT ~ sbtプラグイン ~
https://dk521123.hatenablog.com/entry/2023/01/25/000000
SBT ~ 設定の切替 ~
https://dk521123.hatenablog.com/entry/2023/08/28/165323
SBTでのエラー/警告対応
https://dk521123.hatenablog.com/entry/2023/04/06/093458