3

私の質問: APIの2つの異なるバージョンを処理するための良い方法は何ですか?(サブ質問:同じクラス名を持つ2つのライブラリを含める場合、クラスパス参照の問題を回避する方法はありますか?)

質問の説明: APIを使用するプロジェクトがあります。私は過去数か月を古いバージョンの開発に費やし、新しいバージョンの機能を追加しようとしています。私が知る限り、重大な違いは1つだけです。しかし、私はまだAPIを持っていないので(誰かが私にjarを取得するのを待っています)、それ以上の違いがあるかどうかはわかりません。

サブ質問の説明: 2つのAPIの間にクラス参照の不一致があるのではないかと心配しています(私が言ったように、私はまだjarを持っていません)。

コードを見てみたいと思うかもしれませんが、これは設計上の問題であり、コーディングの問題ではありません。これからいくつかのベストプラクティスを取得したいと思っています。ありがとう!

重複ではない:重複しているように見えるいくつかの質問を調べましたが、実際には私の問題に対処していませんでした:)

4

2 に答える 2

3

避けるか、日陰にします。

クラスパスを完全に制御できる場合は、順序付けを使用できます。これは脆弱で直感的ではありません。

そうしないと、シェーディングとそれに関連する頭痛の種に翻弄されます。

于 2012-07-03T12:53:22.623 に答える
2

使用できるクラスローダー分離戦略もあります。たとえば、コンテナ環境(Java EE、OSGi)を使用している場合は、ライブラリのさまざまなバージョンをさまざまなクラスローダーコンテキスト(つまり、さまざまなEJB jar、またはさまざまなWebアプリケーション)に配置でき、それぞれに干渉することはありません。他の。

OSGiは同じようなことをすることができます。ライブラリA.1とA.2をOSGiコンテナーにデプロイし、project.uno(A.1を使用)とproject.dos(A.2を使用)を同じJVMにデプロイすると、OSGiコンテナーがクラスパス。

于 2012-07-03T13:00:07.593 に答える