2016-05-20 4 views
0

サービスプロバイダAPIを使用して、実行時にURLClassLoaderによってjarをロードしようとしています。しかし、それは失敗を引き起こします。続きURLClassLoaderはSPIに適していますか?

は、私が何をやったか、次のとおりです。

  1. はインターフェースcom.github.soiff.shadow.api.Pluginは、プラグインによって実現することが含まれていshadow-plugin-apiという名前のモジュールを作成します。
  2. shadow-pluginというshadow-plugin-apiという実装を作成し、shadow-plugin-0.0.1-SNAPSHOT.jarとパッケージ化します。実装クラスはcom.github.soiff.shadow.plugin.SpringPluginです。
  3. shadow-coreという名前のスプリングブートアプリケーションを作成し、shadow-plugin-apiを含めます。動的URLClassLoaderによって
  4. ロードshadow-plugin-0.0.1-SNAPSHOT.jarServiceLoaderを通じて私com.github.soiff.shadow.plugin.SpringPluginをロードしようとするが、それは何も得ません。

私のgitリポジトリは:https://github.com/soiff/soiff-shadowです。

私は以下の解決策を試しましたが、まだそれを動作させることはできませんでした。事前に感謝の言葉をお願いします。

  1. SPIインターフェイスのインターフェイスではなく、抽象クラスを試してみました。目標を達成できなかったときにインターフェイスに戻しました。
  2. PathMatchingResourcePatternResolver私はリソースを取得し、URLClassLoaderを入力パラメータとして渡しましたが、動作しませんでした。
  3. 私はResourceFinderをApacheで実装しようとしましたが、適切なリソースが見つかりませんでした。

私の質問は、外部の瓶からリソースをロードするにはどうすればURLClassLoaderですか? SPIは可能な解決策ですか?

答えて

0

簡単に言えば、答えは「はい」です。

あなたは何が間違っているのか不思議に思うかもしれません、良い質問、答えはURLClassLoaderです。しかしどうですか? URLClassLoaderは、あなたが入れた各アイテムでこれを処理するのに十分です。言い換えれば、あなたのURLClassLoaderにあなたが入れた項目が、urlsである可能性があります。 listは、すべての項目が含まれている場合は

loader = new URLClassLoader(list.toArray(new URL[0])); 

:あなたはそれを動作させるにしたいのであれば、指定したディレクトリに外部jarファイルを解凍して、入力パラメータurlsしてURLClassLoaderに抽出されたすべての項目を追加する必要があります。

おそらく他にも良い解決策がありますが、これは私のために働いています。それは誰かがこれのための別のよりよい解決策を投稿することができれば感謝しています。前もって感謝します!

ところで、この解決策はHadoopプロジェクトに基づいています。 Apache Hadoop Work Teamの優れたプロジェクトに感謝​​します。

関連する問題