1

私のプロジェクトでは、 と に依存しorg.slf4j-api:1.7.2ていorg.eclipse.equinox:org.eclipse.equinox.http.jetty:2.0.100ます。

Jetty チームの誰かorg.slf4j.Loggerが 2 つのクラスをorg.slf4j.LoggerFactoryJAR にコピーしました。有難うございます

これorg.slf4j.Logger で、クラスパスに 2 回あります。それらのパブリック API が同じである限り、それは大きな問題ではありません。

2 つのクラス ファイルのパブリック API が同じであることを確認するテストを作成するにはどうすればよいですか?

編集リフレクションを使用してクラスを調べることは明らかな解決策のように見えますが、どのようにそれらをロードするのですか? 利用可能なリソースは 2 つorg/slf4j/Logger.classあります。.class生ファイルをjava.lang.Class調べられるようにするにはどうすればよいですか?

Class.forName()私の場合、2つのうちの1つしか得られないため、機能しません(どちらがどちらかさえわかりません)。

4

2 に答える 2

1

このjavapプログラムは、クラス ファイルの API を一覧表示します。次のように呼び出します。

javap -classpath [your_classpath] -public org.slf4j.LoggerFactory

これにより、パブリック メンバーのリストが出力されますが、入力javap -helpして他のオプションを表示することもできます。

別の方法として、リフレクションを使用して各クラスの API をリストする Java プログラムを作成することもできますが、この方法の方が簡単で、必要なことを正確に実行できると思います。

于 2013-02-22T10:12:41.910 に答える
0

リフレクションを使用して、パブリック メソッドを取得し、それらを名前とそのパラメーターで比較できます。かなり面倒ですが、テストには問題ありません。

また、一度だけの場合は、ソースを参照するだけです。

于 2013-02-22T10:13:16.687 に答える