1

J2EEアプリケーションをビルドしてjarファイルを作成するために使用するantスクリプトがあります。問題は次のとおりです。アプリケーションを実行するには、2つのjarファイルが必要です。

commons-math-2.0.jar
commons-math-1.0.jar

ただし、アプリケーション内の特定のパッケージには2.0のみを使用し、アプリケーションの残りの部分には1.0を使用したいと思います。たとえば、com.naurus.eventhandler.riskなどのパッケージ名で2.0バージョンのみを使用するようにアプリケーションをビルドするにはどうすればよいですか?繰り返しになりますが、私はAntスクリプトを使用していますが、この種のことを行うためのより簡単な方法があれば、実験してみます。ありがとう!

4

3 に答える 3

2

2つのjarに異なるクラス/パッケージが含まれている場合、それらすべてをアプリケーションのクラスパスに含めることは問題ありません。その場合、一方のjarのクラスをもう一方のパッケージで使用しないようにするのは規律の問題です。

しかし、私はこれらの2つのjarファイルにほとんど同じクラス/メソッドが含まれていると思いますか?同じクラスの異なるバージョンを使用する方法はたくさんあります。

  • さまざまなClassLoaderインスタンスを使用します。私はそれを「簡単」とは見なしません。それは、厄介なバグの束への扉を開くことを意味します。(OSGiのようなツールを使用して支援することができます)
  • アプリケーションを2つのプロセスに分割します。これらのプロセスは、同じAntターゲットで起動され、任意の手段(CORBA、RMI、RESTなど)を使用して通信します。

ただし、これらの方法を使用することはお勧めしません。すべてのパッケージで同じバージョンを使用する方がおそらく簡単でしょう。そうすることで何か特別な困難はありますか?

于 2012-10-10T20:00:47.757 に答える
0

jar でマニフェストを使用して、クラスパスを定義できます。

http://docs.oracle.com/javase/tutorial/deployment/jar/manifestindex.html

正直なところ、少し複雑に思えますが、それはあなたの要件です。

于 2012-10-10T20:05:34.327 に答える
0

J2EE アプリケーションをデプロイすると、両方の JAR ファイルが同じクラスパスになるため、これは問題になります。OSGI bundlesを使用すると、各パッケージに個別の依存関係を持たせることができます。ただし、これはアプリケーションの比較的大規模なリファクタリングです。

IMO、次のいずれかが最適です。

a) 2.0 から必要な機能を複製します (数が少なく、ライセンスで許可されている場合、たとえば、個々のクラスをパッケージ化します)。

また

b) アプリケーション全体を 2.0 にアップグレードするために時間を費やす

于 2012-10-10T19:57:20.097 に答える