jDeploy: Java(Kotlin) で作成したコマンドラインツールを npm で公開する

jDeploy を使います。

準備

npm および jDeploy をインストールします。

npm install -g npm jdeploy

npm リポジトリ にユーザーを作成しておきます。

プロジェクトの設定

package.json の作成

以下のコマンドを実行すると雛形が生成されます。

jdeploy init

package.json にパッケージ名を入力します。

{
    "name": "app-name",
    ...
}

ビルド

jDeploy でデプロイできるのは単体で動作する jar ファイルであり、依存するクラスを自動的に解決してくれません。そのため、ライブラリに依存している場合はそのすべてを含めた Fat JAR を生成する必要があります。

build.gradle に以下のようなタスクを追加し、Fat Jar を作成します。

task fatJar(type: Jar) {
    manifest {
        attributes 'Main-Class': "MainKt"
    }
    from {
        configurations.runtimeClasspath.collect {
            it.isDirectory() ? it : zipTree(it)
        }
    }
    zip64 true
    with jar
}

ビルド例

./gradlew fatJar

デプロイ

package.json の jdeploy.jar に、パッケージに含める JAR ファイルのパスを指定します。

  "jdeploy": {
    "jar": "build/libs/app-1.0.jar"
  }

npm にログインします。

npm login

以下のコマンドでデプロイします。

jdeploy publish

これにより、jdeploy-bundle ディレクトリに jar ファイルと必要なファイルが作成され、npm パッケージとしてデプロイされます。