1

現在、Wicketプロジェクトをwicketバージョン1.4.2から6.4.0にアップグレードしています。ウィケットコンポーネント/ページの移行はうまくいきましたが、projetの依存関係に問題があります。

これは古いプロジェクトであり、古いテクノロジーとプライベートフレームワークに依存しています。私の会社のフレームワークは(今のところ)アップグレードできないので、その特異性に対処する必要があります。

WebアプリをGlassfishにデプロイすると、次のエラーが発生します。

ERROR - ContextLoader              - Context initialization failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in URL  [jar:file:/home/company/glassfish/domains/domain1/applications/j2ee-modules/mainProject-3.0.0-SNAPSHOT/WEB-INF/lib/daoProject-3.0.0-SNAPSHOT.jar!/dataContext.xml]: Invocation of init method failed; nested exception is java.lang.NoSuchMethodError: org.objectweb.asm.ClassWriter.<init>(I)V

これは、異なるバージョンを使用するWicketとSpringの両方に含まれているASMが原因のようです。

<dependencies>私のpomsからの部分があります:

主なプロジェクト:

<dependency>
    <groupId>my.company</groupId>
    <artifactId>privateFramework</artifactId>
    <version>1.1.6</version>
</dependency>
<dependency>
    <groupId>my.company</groupId>
    <artifactId>daoProject</artifactId>
    <version>3.0.0-SNAPSHOT</version>
</dependency>
<dependency>
    <groupId>org.apach.wicket</groupId>
    <artifactId>wicket-spring</artifactId>
    <version>6.4.0</version>
</dependency>

DAOプロジェクト:

<dependency>
    <groupId>my.company</groupId>
    <artifactId>privateFramework</artifactId>
    <version>1.1.6</version>
</dependency>

プライベートフレームワーク:

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-hibernate3</artifactId>
    <version>2.0.8</version>
</dependency>

出力があり$ mvn dependency:tree -Dverbose -Dincludes=asmます:

[INFO] --- maven-dependency-plugin:2.1:tree (default-cli) @ immatriculation ---
[INFO] my.company:mainProject:war:3.0.0-SNAPSHOT
[INFO] +- my.company:privateFramework:jar:1.1.6:compile
[INFO] |  \- org.springframework:spring-hibernate3:jar:2.0.8:compile
[INFO] |     \- org.hibernate:hibernate:jar:3.2.5.ga:compile
[INFO] |        +- asm:asm-attrs:jar:1.5.3:compile
[INFO] |        \- asm:asm:jar:1.5.3:compile
[INFO] \- org.apache.wicket:wicket-spring:jar:6.4.0:compile
[INFO]    \- org.apache.wicket:wicket-ioc:jar:6.4.0:compile
[INFO]       \- cglib:cglib:jar:2.2.2:compile
[INFO]          \- (asm:asm:jar:3.3.1:compile - omitted for conflict with 1.5.3)

このような依存関係の競合を解決するための「ベストプラクティス」はありますか?いくつかのことを試しましたが(を除いasmprivateFramework、asmを3.3.1に強制してdependencyManagement、...を使用して)、動作させることができませんでした。

ありがとうございました

4

1 に答える 1

2

スコープをに設定しcglib:cglibprovided(WARファイルに追加されないように)、cglib:cglib-nodep代わりに使用してみてください。このcglibのディストリビューションには、asmの「シェーディング」バージョン(基本パッケージが変更された)が埋め込まれているため、競合が無効になります。

これをPOMに追加します。

<dependency>
    <groupId>cglib</groupId>
    <artifactId>cglib</artifactId>
    <version>2.2.2</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>cglib</groupId>
    <artifactId>cglib-nodep</artifactId>
    <version>2.2.2</version>
</dependency>
于 2013-01-09T13:34:39.843 に答える