2011-09-30 9 views
8

私のプロジェクトでは、glassfish-embedded 3.1.1とguava libの両方を使用しています...問題はglassfishがグアバの古い実装(つまりgoogle-collections)に付属していることです。 ..クラスパスの競合を処理する方法

これは、後でguavaで導入されたLists.reverse()やSets.newIdentityHashSet()の使用時など、実行時にNoSuchMethodErrorになります。

私はこれを解決するための任意の解決策が見つからない...(一つだけを手動でCOM/GlassFishの瓶で、Googleのclassesディレクトリをゴミ箱にある...)

+0

回避策はありますか? – JagWire

+1

残念ながら、まったく... –

+1

気になる場合は、組み込みのv4ビルドが見つかり、クラスパスの問題が解消されました。ここでビルドを見つけることができます:http://grepcode.com/snapshot/maven.java.net/content/groups/promoted/org.glassfish.main.extras/glassfish-embedded-all/4.0.1-b01 – JagWire

答えて

4

Glassfishのは、自分の瓶でcom.googleクラスが含まれたことがないはずです。それは誤りでした。

UPDATE [@ sly7_7]:グラスを自分の瓶に入れていないようですが、代わりにグアバのアーティファクトに依存しています。これで問題は解決します。 これを指摘してくれた@JagWireに感謝します。

+0

それは私が考えるものです。 .. slf4jの場合と同じことです:( –

+0

手元にある問題の解決策または回避策はありますか? – JagWire

6

あなたはこれを指定することが克服することができます以下。これは、SO一般的でJava EEアプリケーションのクラスローディングに投稿Delegation section of the Class Loaders chapter.

<class-loader delegate="false" /> 

チェックを読む:Java EE class loading standard

+0

私たちはそれを試してみますが、私たちのケースでは動作しません...これはClassCastExceptionになります(異なるクラスローダーによってロードされた同じクラスが原因である可能性あり) –

関連する問題