为什么我的webapplication NoClassDefFoundError:org / aspectj / lang / reflect / AjTypeSystem

时间:2014-01-11 05:12:47

标签: java weblogic aspectj noclassdeffounderror spring-aop

我是一个maven web应用程序。我使用的是JSF,Primefaces,Hibernate,Spring,Spring AOP和ORACLE 11g。 因此,当我在Glassfish 3上部署我的应用程序时,它运行得很好,但是当我在weblogic 12上部署它时,我得到了下一个错误:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'Usuarios' defined in ServletContext resource [/WEB-INF/classes/applicationContext.xml]: BeanPostProcessor before instantiation of bean failed; nested exception is java.lang.NoClassDefFoundError: org/aspectj/lang/reflect/AjTypeSystem

Caused By: java.lang.NoClassDefFoundError: org/aspectj/lang/reflect/AjTypeSystem

所以我打开了我的战争然后我查看了WEB-INF / lib并找到了(aspectjrt.jar和aspectweaver.jar),所以我不确定哪里错了。 这是我的pom的一部分,我在其中声明了aspectJ libs:

<properties>
    <endorsed.dir>${project.build.directory}/endorsed</endorsed.dir>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

    <spring.version>3.2.4.RELEASE</spring.version>
    <aspectj.version>1.7.0</aspectj.version>
    <java.version>1.7</java.version>
    <netbeans.hint.deploy.server>WebLogic9</netbeans.hint.deploy.server>
    <netbeans.hint.j2eeVersion>1.6</netbeans.hint.j2eeVersion>
</properties>


    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>${spring.version}</version>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>${spring.version}</version>
    </dependency> 

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-web</artifactId>
        <version>${spring.version}</version>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-tx</artifactId>
        <version>${spring.version}</version>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-orm</artifactId>
        <version>${spring.version}</version>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-test</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-aop</artifactId>
        <version>${spring.version}</version>
    </dependency>        
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-aspects</artifactId>
        <version>${spring.version}</version>
    </dependency>      
    <!-- aspectJ -->
    <dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>aspectjrt</artifactId>
        <version>${aspectj.version}</version>
    </dependency>
    <dependency>
        <groupId>org.aspectj</groupId>
        <artifactId>aspectjweaver</artifactId>
        <version>${aspectj.version}</version>
    </dependency> 

所以有人都知道发生了什么。我已经用Google搜索了错误,但是每个人都说可能缺少aspectjrt.jar和aspectweaver.jar,但我很确定它们没有。

提前致谢。

1 个答案:

答案 0 :(得分:3)

您是否在weblogic.xml中尝试过此操作:

<container-descriptor>
   <prefer-web-inf-classes>true</prefer-web-inf-classes>
</container-descriptor>

,这在weblogic-application.xml中:

   <prefer-application-packages>
      <package-name>org.springframework.*</package-name>
   </prefer-application-packages>

我自己没有尝试过,但在http://forum.spring.io/forum/spring-projects/aop/91846-can-t-find-ajtypesystem-during-deployment上发现了这个...基本上即使你在WAR中有了aspectjrt.jar和aspectweaver.jar,它们也不会被加载,因为WLS认为它们在其系统类路径中的其他位置可用(通常在类加载器层次结构中“更高”),有时使用另一个版本。这是EE应用程序服务器上的典型问题,它们中的每一个(WLS,WAS,JBoss)都有一些配置来影响类路径加载顺序。如果上面没有完全正常工作,谷歌会进一步发展,你会明白的......祝你好运。