maven-shade-plugin を使用して、いくつかの Clojure ライブラリといくつかの Java を含む jar アーティファクトをパッケージ化する場合。Clojure コードには AOT コンパイルを使用していました。jar をロードすると、ロード時間が非常に遅くなりました。AOT コンパイルはこれにかなり役立つはずですが、実際にはそうではありませんでした。Clojure クラスがロードされているときに、Java jar -verbose の出力で、JVM__DEFINE_CLASS呼び出しが多数発生していることに気付きました。
Clojure コードの多くが .class ファイルに AOT コンパイルされていたため、これは意味がありませんでした。
maven-shade-plugin はすべての新しいファイルを作成し、最終アーティファクトに新しいタイムスタンプが含まれていることがわかりました。Clojure は .clj ファイルと .class ファイルのタイムスタンプ情報を使用して、ファイルを再コンパイルする必要があるかどうかを判断します。maven-shade-plugin により、.clj ファイルと関連する .class ファイルのタイムスタンプが同じになるため、Clojure は常にソースを動的に再コンパイルすることを選択していました。
現時点で判明している唯一の回避策は、シェーディングされた jar を再度開き、.clj ファイルのタイムスタンプを過去のある時点に戻すスクリプトを作成することです。関連する .class ファイルのタイムスタンプと等しくなります。
誰もがより良いアプローチを知っていますか?