問題タブ [uberjar]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - Spring Boot ファット jar の NoClassDefFoundError ですが、依存関係はコンパイル済みアーカイブにあり、アプリケーションは IDE で正常に動作します
更新:解決済み
何らかの理由で、 を拡張するカスタム クラスをロードするために使用していたクラス ローダーには、GenModel予期していなかった、既にロードされているクラスのコンテキストがありませんでした。そのためGenModel、デバッグの観点からはロードされていましたが、私modelLoaderの観点からはロードされていませんでした。
解決策:URLClassLoaderインスタンスに親コンテキストを渡すことができます。GenModel渡すコンテキストが正確にわからないので、すでにロードされていることがわかっているクラスのコンテキストを取得し、そのコンテキストには明らかに が含まれていると考えましたGenModel。そのため、最終的にコードを 1 行だけ変更しました。
なりました
そしてそれはそれを解決しました!
@EvilToad に声をかけてください。コメントを通じて私を正しい軌道に乗せてくれました!
元の問題:
コンパイル済みの h2o ニューラル ネットワーク モデルを Web サービスとして実装し、実行時にモデルを注入するプロトタイプを構築しています。このアプリは、Spring Boot が組み込まれた Tomcat サーバーで実行され、Maven プロジェクトです。Maven POM には次の依存関係があります。
この依存関係には class が含まれますhex.genmodel.GenModel。アプリケーションが起動すると、 を使用してカスタム モデル クラスがロードURLClassLoaderされ、 としてキャストされますGenModel。関連するコードは次のとおりです。
...
そして、ここに私のPOMがあります:
次の IntelliJ 構成を使用してアプリケーションを作成して実行すると、すべてがうまく動作します。
すべてがロードされ、サーバーが期待どおりに起動し、すべての機能が動作します。
一方、mvn clean installorpackageを実行すると問題なくビルドされますが、 を実行するjava -jar <myjarartifact>と、アプリケーションは例外をスローします。
...Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.----.research.machinelearning.neuralnets.NeuralNetPredictor]: Factory method 'neuralNetPredictor' threw exception; nested exception is java.lang.NoClassDefFoundError: hex/genmodel/GenModel
...Caused by: java.lang.NoClassDefFoundError: hex/genmodel/GenModel
...Caused by: java.lang.ClassNotFoundException: hex.genmodel.GenModel
ここに私を驚かせる部分があります: スプリング ブートによって生成されたファット jar の中を見ると、hex.genmodel.GenModel がそこにあり、他の依存関係と何の違いもありません:
更新: スタック トレースは次のとおりです。
どんな洞察も大歓迎です!
scala - Play 用の sbt の Uber (fat) jar から除外! Scalaで
プロプライエタリなハードウェア用のファット jar を含める必要があるプロジェクトがあります。質問しないでください。jar を Central または他のリポジトリに配置するのが最善であることはわかっていますが、そうではありません。:( sbt が管理されていない依存関係として扱うように、lib ディレクトリに配置する必要があります。
しかし、jar には古いバージョンの slf4j が含まれており、いつ Play! 実行すると、静的関数が見つからないというエラーがスローされます (これは、slf4j の新しいバージョンで追加されました)。
これが私が試したことです。
- force() を使用して libraryDependency を追加しようとしました。サイコロはありません。
- ここで見つけたいくつかの excludeAll サンプルを試しました。サイコロはありません。
- 絶望的な気持ちから、jar を解凍し、slf4j を削除して、jar を再度作成しました。It Works! ですが、真剣に、これはプロジェクトを維持するための私の最初の選択ではありません。
sbt ベースの scala または play プロジェクトで管理されていない依存関係である Uber jar 内の何かを除外する方法を知っている人はいますか?
heroku - Heroku の Clojure ビルドパックでビルド コマンドを構成する方法は?
Heroku はlein uberjarClojure アプリをビルドするために実行されていますが、実行するには Heroku が必要ですlein ring uberjar。ビルドパックをフォークせずにこれを構成できますか?
lein ring server-headlessスタンドアロンの jar の代わりに、Web プロセスを開始に使用するように設定しようとしましたが、依存関係のインストール中にブート タイムアウトが発生します。
python - uber-jar に相当する Python
Python の世界で uber-jar に相当するものを探しています。
- 3 つの主要なプラットフォーム (Windows、Mac、Linux) すべてに Python パッケージを配布する必要があります。
- ターゲット プラットフォームにはインターネットがない可能性があるため、すべての依存関係をバンドルする必要があります。
クロスプラットフォームのディストリビューションでなければならないので、複数のターゲット向けにビルドする必要はありません。つまり、次のようにすべてのプラットフォームで実行できるはずです。
python package.ext
パッケージは純粋な python (ネイティブ コードなし) であると想定できます。 これらの要件を満たすものはありますか?
次のオプションを知っていますが、それぞれに欠陥があります。
.whlpipインストールに必要なパッケージ。.eggすべてのパッケージの依存関係を含むを作成する方法がわかりません。- この PEP: http://legacy.python.org/dev/peps/pep-0441は、python が実行
.zip中のファイルをサポートしていることを示していますが、AFAICT、そのような zip を作成するための最適なツールは pex ( https://github.com/pantsbuild /pex )、これは Windows をサポートしていないと思います