web-dev-qa-db-ja.com

Mavenを使用するときにSpring3で明示的なcglib依存関係宣言が必要なのはなぜですか?

Spring3とMavenを使用しています。 pom.xmlですべてのSpringモジュールを定義しました。

<aop:scoped-proxy />を使用すると、CGLIBがないというエラーが表示されます。

ええと...私は私のpomの依存関係としてCGLIBを追加し、それはすべて実行されます...

少し混乱しています... Mavenは依存関係マネージャーです... spring-aopモジュールを使用するとCGLIBがダウンロードされないのはなぜですか?

それだけではありません...一部のプロジェクトでは、Mavenの推移的な依存関係メカニズムを使用する代わりに、明示的な依存関係の宣言が必要なのはなぜですか?

26
Jerome Cance

これは、cglibが オプションの依存関係 としてマークされているためです。

基本的に、spring-aopライブラリを使用するたびにcglibは必要ないため、mavenは自動的にダウンロードしません。残念ながら、手動で指定する必要があります。

52
user7094

少し混乱しています... Mavenは依存関係マネージャーです... spring-aopモジュールを使用するとcglibがダウンロードされないのはなぜですか?

誰もがCGLIBを使用するわけではないため(SpringのAOPプロキシはJDK動的プロキシまたはCGLIBプロキシにすることができます)、CGLIBは オプション のpomの依存関係としてマークされます spring-aop =使用する場合は、明示的に追加する必要があります。これはまさにオプションの依存関係の目的です。

別の同様の例はHibernateで、同じ方法で hibernate-core でcglibとjavassistのどちらかを選択できます。 Hibernateでは、さまざまな接続プール(いずれかを使用する場合)またはキャッシュプロバイダー(デフォルトのehcacheのみがオプションとして宣言されていない)間で 選択 することもできます。

17
Pascal Thivent

私の推測では cglibはデフォルトでSpringでは有効になっていません 。したがって、明示的に有効にしない限り、pomには含まれません。

私の知る限り、MavenはSpring構成ファイルにアクセスして、オプションで有効な追加のライブラリが必要かどうかを判断できません。ただし、プラグインを介してオンザフライでpomを変更できれば、それは確かにクールなSpring-Mavenプラグインのように聞こえます。そうかどうかはわかりませんが、かっこいいでしょう。

5
Mike Cornell

良いニュース-これは過去の問題です

Spring 3.2以降、CGLIBクラスはorg.springframeworkの下に再パッケージ化され、Spring-Core JARに直接含まれるため、プロジェクトのクラスパスにCGLIBを追加する必要はなくなりました。これは、CGLIBベースのプロキシサポートが、JDK動的プロキシが常に持っているのと同じように機能することを意味します。

続きを読む ここ

2
Fritz Duchardt