Gradleプロジェクトで生成した実行スクリプトがGitBash(MSYS環境)でうまく動かない
GitBash環境でSDKMAN!を使ってJBakeをインストールしたのですが、 jbake
コマンドを実行すると次のようなエラーが出てうまく動きませんでした。
エラー: メイン・クラスorg.jbake.launcher.Mainを検出およびロードできませんでした 原因: java.lang.ClassNotFoundException: org.jbake.launcher.Main
実行スクリプトを調べてみると、クラスパス設定時にjarをワイルドカード指定している(参考)のですが、そこで絶対パスの記述方式がMSYSのもの /c/Users/yuki/…/*
のような形になっているため java
コマンドに想定通り受け付けられていないようでした。
この jbake
スクリプトファイルを見てみたところ、次のようにmsysを判定している処理は入っていました。
が、この msys
変数を以降の処理で全く参照していませんでした。
jbake
# OS specific support (must be 'true' or 'false'). cygwin=false msys=false darwin=false nonstop=false case "`uname`" in CYGWIN* ) cygwin=true ;; Darwin* ) darwin=true ;; MINGW* ) msys=true ;; NONSTOP* ) nonstop=true ;; esac
Cygwinと同じ分岐に乗せればうまく動きそうに見えたので、そのように修正しようとしたのですが、いくらGitリポジトリを探してもみつからない。つまりバージョン管理対象ではなく自動生成しているようでした。
ファイルをいろいろ見て回った結果、 gradle/application.gradle
ファイル内の startScripts
がそれっぽく見えたので検索してみたところ、やっとたどり着きました。
Gradleのコア機能だったようです。 これはGradleへの近トリビュートチャンスか?と思いIssuesを見てみたのですが、なんと、最新のバージョンである5.6で修正されていました…
というわけで、JBakeがGitBashで実行できない問題は、gradlewが使用しているGradleのバージョンをアップグレードすれば解消されます。
というわけでIssueを挙げました: