ユーティリティ用のjarライブラリを開発しています。
外部の jar/ライブラリへの依存を大幅に削減したいのですが、そのようなライブラリがクラス パスに存在する場合はネイティブ サポートを提供します。
たとえば、休止状態で動作するルーチンをライブラリに提供してほしいと考えています。ただし、休止状態のjarファイルが存在しない場合、アプリケーションがエラーで終了することは望ましくありません。
休止状態の jar をライブラリにバンドルすることなく、これを実装する方法はありますか?
初期化中に、Hibernate クラスの 1 つを検索するために使用できます。Class.forNameそれが catch をスローし、ClassNotFoundExceptionHibernate が環境にないことがわかっている場合は、フラグを設定して、Hibernate 固有の処理を実行しないようにします。
ただし、クラスのいずれかが Hibernate クラスを静的に (たとえば を介してimport) 参照する場合、Hibernate がクラス パスにない場合、それらのクラスはロードされないことに注意してください。これに対処する通常の方法は次のとおりです。
HibernateStuff。import.HibernateStuffImpl。そのクラスはimportものを休止させることができます。Class.forNameHibernate が ( 経由で)クラスパスにあると判断したら、 を使用Class.forNameしてロードし、HibernateStuffImplを使用Class#newInstanceしてそのインスタンスを作成し、それを type の変数に割り当てますHibernateStuff。HibernateStuffStubクラスがあり、Hibernate がロードされていないときにそれを使用すると、コードに条件ステートメントが散らばることがありません。(JVM はノーオペレーション コールで非常に高速です。)...そしてもちろん、上記のすべては、Hibernate だけでなく、あらゆるものに当てはまります。