Java の jar ファイルでコンソールアプリを実行してみた

めちゃくちゃ久しぶりに Java を触る機会がありました。JSON を読み書きするには、別途 JSON 用の jar ファイルが必要で、それをクラスパスに追加してコンパイルと実行をする必要があります。例えば Gradle とか Maven とか Spring とか使えば良いのですが、確か Java って zip ファイルみたいに jar ファイルで必要なファイルを固めてアプリを実行することが可能なはずなので、実際に試してみました。

検証用の Java コード MainApp.Java

import org.json.JSONObject;

public class MainApp {
    public static void main(String[] args) {
        JSONObject jo = new JSONObject("{ \"abc\" : \"def\" }");
        System.out.println(jo);
    }
}

まずはクラスパスに JSON 用の jar ファイルを指定して実行

$ javac -cp .:json-20230618.jar MainApp.java

$ java -cp .:json-20230618.jar MainApp     
{"abc":"def"}

MainApp.class と json-20230618.jar を jar に固める

$ jar cf main.jar MainApp.class json-20230618.jar

$ java -jar main.jar 
main.jarにメイン・マニフェスト属性がありません

メイン・マニフェストを作成

$ mkdir META-INF

$ code META-INF/MANIFEST.MF
Manifest-Version: 1.0
Main-Class: MainApp
Class-Path: json-20230618.jar

マニフェストを含む jar を作成し直す

$ rm main.jar

$ jar cfm main.jar META-INF/MANIFEST.MF MainApp.class json-20230618.jar

今回のゴールである jar だけでコンソールアプリを実行

$ java -jar main.jar 
{"abc":"def"}

参考

https://github.com/stleary/JSON-java

タグ: