2016-02-14 58 views
10

Recentemente ho iniziato a lavorare su AspectJ e ho scritto un semplice Aspect for Logging.Eccezione java.lang.NoClassDefFoundError: org/aspectj/lang/annotation/Aspect

ho definito sotto le dipendenze nel mio file pom:

 <dependency> 
      <groupId>org.aspectj</groupId> 
      <artifactId>aspectjrt</artifactId> 
      <version>1.7.1</version> 
     </dependency> 
     <dependency> 
      <groupId>org.aspectj</groupId> 
      <artifactId>aspectjweaver</artifactId> 
      <version>1.7.1</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-aspects</artifactId> 
     </dependency> 

e seguendo gli artefatti sono presenti nell'orecchio cartella/lib:

  • aspectjrt-1.7.1.jar
  • aspectjweaver-1.7.1.jar
  • spring-aspects-3.2.1.RELEASE.jar

io sono sempre qui di seguito eccezione all'avvio del servizio .:

05:59:18,325 ERROR [org.springframework.web.context.ContextLoader] (MSC service thread 1-15) Context initialization failed: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'calNamingBean' defined in ServletContext resource [/WEB-INF/helixservicebeans.xml]: BeanPostProcessor before instantiation of bean failed; nested exception is java.lang.NoClassDefFoundError: org/aspectj/lang/annotation/Aspect 
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:452) [spring-beans-3.1.1.RELEASE.jar:3.1.1.RELEASE] 
        at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294) [spring-beans-3.1.1.RELEASE.jar:3.1.1.RELEASE] 
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225) [spring-beans-3.1.1.RELEASE.jar:3.1.1.RELEASE] 
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291) [spring-beans-3.1.1.RELEASE.jar:3.1.1.RELEASE] 
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) [spring-beans-3.1.1.RELEASE.jar:3.1.1.RELEASE] 
        at org.springframework.context.support.AbstractApplicationContext.registerBeanPostProcessors(AbstractApplicationContext.java:740) [spring-context-3.1.1.RELEASE.jar:3.1.1.RELEASE] 
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:449) [spring-context-3.1.1.RELEASE.jar:3.1.1.RELEASE] 
        at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:385) [spring-web-3.1.1.RELEASE.jar:3.1.1.RELEASE] 
        at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:284) [spring-web-3.1.1.RELEASE.jar:3.1.1.RELEASE] 
        at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:111) [spring-web-3.1.1.RELEASE.jar:3.1.1.RELEASE] 
        at org.apache.catalina.core.StandardContext.contextListenerStart(StandardContext.java:3392) [jbossweb-7.0.17.Final.jar:] 
        at org.apache.catalina.core.StandardContext.start(StandardContext.java:3850) [jbossweb-7.0.17.Final.jar:] 
        at org.jboss.as.web.deployment.WebDeploymentService.start(WebDeploymentService.java:89) [jboss-as-web-7.1.3.Final.jar:7.1.3.Final] 
        at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1811) 
        at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1746) 
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [rt.jar:1.7.0_45] 
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [rt.jar:1.7.0_45] 
        at java.lang.Thread.run(Thread.java:744) [rt.jar:1.7.0_45] 
      Caused by: java.lang.NoClassDefFoundError: org/aspectj/lang/annotation/Aspect 
        at org.springframework.aop.aspectj.annotation.AbstractAspectJAdvisorFactory.hasAspectAnnotation(AbstractAspectJAdvisorFactory.java:119) [spring-aop-3.1.1.RELEASE.jar:3.1.1.RELEASE] 
        at org.springframework.aop.aspectj.annotation.AbstractAspectJAdvisorFactory.isAspect(AbstractAspectJAdvisorFactory.java:115) [spring-aop-3.1.1.RELEASE.jar:3.1.1.RELEASE] 
        at org.springframework.aop.aspectj.annotation.AnnotationAwareAspectJAutoProxyCreator.isInfrastructureClass(AnnotationAwareAspectJAutoProxyCreator.java:100) [spring-aop-3.1.1.RELEASE.jar:3.1.1.RELEASE] 
        at org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator.postProcessBeforeInstantiation(AbstractAutoProxyCreator.java:278) [spring-aop-3.1.1.RELEASE.jar:3.1.1.RELEASE] 
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInstantiation(AbstractAutowireCapableBeanFactory.java:880) [spring-beans-3.1.1.RELEASE.jar:3.1.1.RELEASE] 

Modifica 1 - sto usando JBOSS 7.1 e penso che ci sono alcuni problemi con AspejctJ e JBOSS.

https://stackoverflow.com/questions/33164216/load-time-weaving-with-aspectj-in-jboss-as-7-1

+0

http://stackoverflow.com/questions/25861105/spring-aop-around-class-class-not-found-exception? – hahn

+0

Controlla questa risposta http://stackoverflow.com/questions/6263311/which-jars-are-needed-for-using-aspectj-of-spring-framework – breakline

+0

Ho passato sia le domande che le loro risposte. Senza fortuna. In Local, posso eseguire utilizzando la stessa configurazione ma non riesce quando lo sto distribuendo sul server JBoss. – Atul

risposta

8

Un NoClassDefFoundError come questo in un progetto di Maven è di solito da un conflitto biblioteca. Non ci sono informazioni sufficienti nella domanda, fornisci solo uno snippet del tuo pom e non mostri la versione degli aspetti primaverili che stai utilizzando. È necessario eseguire la dipendenza da mvn: albero e verificare che si stiano utilizzando numeri di versione coerenti di tutte le dipendenze dell'aspetto.

Edit: C'è sicuramente una sorta di conflitto biblioteca perché si parla di primavera-aspetti 3.2.1.RELEASE nella questione, ma la traccia dello stack contiene un sacco di riferimenti alla primavera 3.1.1.RELEASE librerie.

+0

Non ci sono conflitti. L'ho verificato – Atul

+0

Hai un errore nella tua domanda o hai versioni in conflitto di librerie. Non dovresti avere nessuna versione 3.1.1.RELEASE delle librerie (come nella tua traccia stack) con la versione 3.2.1.RELEASE degli aspetti primaverili. – hyness

1

risposta alla tua domanda

  1. Se si utilizza Spring 3.2.1.RELEASE, si prega di modificare l'ID gruppo come net.anthavio.maven, trovo solo aspectjweaver.1.7.4.jar file viene presentata come una dipendenza. Si prega di cambiare la propria dipendenza per aspectjweaver come versione 1.7.4.
  2. Si consiglia di utilizzare sempre la Distinta materiali quando si utilizza Spring 3.X e versioni successive.
  3. Ho dato un esempio POM, è possibile convalidare di conseguenza per abbinare al POM esistente.

            <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
                xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
                <modelVersion>4.0.0</modelVersion> 
                <groupId>com.yourcompany.app</groupId> 
                <artifactId>springBOM</artifactId> 
                <version>0.0.1-SNAPSHOT</version> 
    
                <dependencyManagement> 
                 <dependencies> 
                  <dependency> 
                   <groupId>org.springframework</groupId> 
                   <artifactId>spring-framework-bom</artifactId> 
                   <version>3.2.10.RELEASE</version> 
                   <type>pom</type> 
                   <scope>import</scope> 
                  </dependency> 
                 </dependencies> 
                </dependencyManagement> 
                <dependencies> 
                <dependency> 
                 <groupId>org.springframework</groupId> 
                 <artifactId>spring-aop</artifactId> 
                </dependency> 
                <dependency> 
                 <groupId>org.springframework</groupId> 
                 <artifactId>spring-aspects</artifactId> 
                </dependency> 
                <dependency> 
                 <groupId>org.springframework</groupId> 
                 <artifactId>spring-beans</artifactId> 
                </dependency> 
                <dependency> 
                 <groupId>org.springframework</groupId> 
                 <artifactId>spring-context</artifactId> 
                </dependency> 
                <dependency> 
                 <groupId>org.springframework</groupId> 
                 <artifactId>spring-context-support</artifactId> 
                </dependency> 
                <dependency> 
                 <groupId>org.springframework</groupId> 
                 <artifactId>spring-core</artifactId> 
                </dependency> 
                <dependency> 
                 <groupId>org.springframework</groupId> 
                 <artifactId>spring-expression</artifactId> 
                </dependency> 
    
                <dependency> 
                 <groupId>org.springframework</groupId> 
                 <artifactId>spring-jdbc</artifactId> 
                </dependency> 
    
                <dependency> 
                 <groupId>org.springframework</groupId> 
                 <artifactId>spring-orm</artifactId> 
                </dependency> 
                <dependency> 
                 <groupId>org.springframework</groupId> 
                 <artifactId>spring-oxm</artifactId> 
                </dependency> 
                <dependency> 
                 <groupId>org.springframework</groupId> 
                 <artifactId>spring-test</artifactId> 
                </dependency> 
                <dependency> 
                 <groupId>org.springframework</groupId> 
                 <artifactId>spring-tx</artifactId> 
                </dependency> 
                <dependency> 
                 <groupId>org.springframework</groupId> 
                 <artifactId>spring-web</artifactId> 
                </dependency> 
                <dependency> 
                 <groupId>org.springframework</groupId> 
                 <artifactId>spring-webmvc</artifactId> 
                </dependency> 
                </dependencies> 
                <build> 
                 <finalName>springBOM</finalName> 
                 <plugins> 
                 <plugin> 
                 <groupId>org.apache.maven.plugins</groupId> 
                 <artifactId>maven-compiler-plugin</artifactId> 
                 <version>3.5.1</version> 
                 <configuration> 
                  <source>1.7</source> 
                  <target>1.7</target> 
                 </configuration> 
                 </plugin> 
                </plugins> 
                </build> 
                </project> 
    
  4. Si consiglia di scegliere la versione primavera-3.2.10.RELEASE in versione standard a viene rilasciato il più recente rispetto la versione citato nella sua interrogazione. Si applica solo a questo contesto specifico . Altrimenti, consiglierei di aggiornare i file JAR alla versione Spring 4.X.

3

java.lang.NoClassDefFoundError: org/aspectj/lang/annotation/Aspect

Sembra barattolo contenente classe org.aspectj.lang.annotation.Aspect non viene caricato da classpath in fase di esecuzione, si può provare a rimuovere sotto la dipendenza:

<dependency> 
    <groupId>org.springframework</groupId> 
    <artifactId>spring-aspects</artifactId> 
</dependency> 

e aggiungere di seguito nel classpath:

<dependency> 
    <groupId>org.springframework</groupId> 
    <artifactId>spring-aop</artifactId> 
    <version>3.2.1.RELEASE</version> 
</dependency> 
+1

Questo non è necessario, gli aspetti primaverili dipendono dalla primavera. Maven lo tira in transito senza le tue modifiche. Inoltre, Aspect non manca. Non sta ottenendo una NoClassFoundException, il che significa che è mancante, sta ottenendo un NoClassDefFoundError che significa semplicemente che la classe non è stata caricata. – hyness

1

Per verificare che la tua guerra fosse avvolta con il vaso adatto (aspectrj - che r eally contiene questa classe -org.aspect.lang.annotation.Aspect).

Provare (in eclissi) per aggiungere manualmente questa dipendenza.

fare clic con il tasto destro sul progetto -> Deployment Assembly -> aggiungi -> Archivi dal file system -> selezionare aspectjrt-1.7.1.jar (lo si può trovare nel repository locale .m2). applica esegue la nuova guerra -> ora la guerra dovrebbe includere questa dipendenza. Se il messaggio di errore è scomparso -> indica che qualcosa è andato storto con l'obiettivo della confezione di guerra.