0

非常に古いバージョンの Apache common io バージョン 1.2 を読み取る現在のアプリケーションがあります。久しぶりに最新の 2.3 を使用したいくつかの新しい更新をリリースしており、最新の commons IO jar ファイルのみを使用して新しいコードを実行したいと考えています。新しいコードが最新の共通 IO jar と古いバージョンからのみ読み取られるように、この問題をどのように処理できますか。(要するに、実行中のものには何も触れないでください)

オンラインで検索すると、クラスをロードする必要があることに気付きましたが、 UrlClassLoader または ClassLoader を実行する必要があるかどうか少し混乱しました。依存関係を気にしたり、各クラスを呼び出したりすることなく、実行するコードを実行するためにメイン クラスを呼び出します

提案してください ?前もって感謝します。

4

2 に答える 2

0

OSGi フレームワークを使用して、両方の Apache 共通 io ライブラリを並べて実行できます。次に、特定のバージョンのパッケージをエクスポートおよびインポートすることで、どのバンドルがどの apache ライブラリ バンドルを使用するかを制御できます。

lib バンドルに含まれます: Export-Package: com.acme.foo;version="1.24"

そしてそれを使用するバンドルで:

インポート パッケージ: com.acme.foo;version="[1.23, 2.0)"

OSGi では、すべてのバンドルに独自の個別のクラスローダーがあるため、すべての適切なサブパッケージとクラスのロードが自動的に処理され、競合は発生しません。

たとえば、OSGi バンドルを作成するためのこれらの手順とデモを確認できます。これらを実行するには、mBedded Serverを使用します。

于 2012-06-06T08:00:54.240 に答える
0

クラスローダーは間違いなくソリューションの一部ですが、これを自分で実装するのは非常に困難です。適切に構成すれば、OSGi を使用してみてください。

于 2012-06-05T19:08:30.707 に答える