2011-09-04 3 views
11

Spring 및 AspectJ를 사용하여로드 시간을 구현하려고합니다. 내가 아는 한 나는 모든 것이 제대로 구성했지만 내 통합 테스트를 실행하려고 할 때이 오류가 계속 :Spring의 LoadTimeWeaver 에이전트가 시작되지 않습니다.

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.context.weaving.AspectJWeavingEnabler#0': Initialization of bean failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'loadTimeWeaver': Initialization of bean failed; nested exception is java.lang.IllegalStateException: ClassLoader [sun.misc.Launcher$AppClassLoader] does NOT provide an 'addTransformer(ClassFileTransformer)' method. Specify a custom LoadTimeWeaver or start your Java virtual machine with Spring's agent: -javaagent:org.springframework.instrument.jar 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:527) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:291) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:288) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) 
    at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1079) 
    at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:643) 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:407) 
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139) 
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83) 
    at com.boku.risk.service.perisistence.PersistenceTestBase.setupBase(PersistenceTestBase.java:23) 
    at com.boku.risk.service.dao.CountryLimitDaoTest.setup(CountryLimitDaoTest.java:33) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44) 
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) 
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41) 
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:27) 
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:76) 
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50) 
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193) 
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52) 
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191) 
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42) 
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184) 
    at org.junit.runners.ParentRunner.run(ParentRunner.java:236) 
    at org.junit.runner.JUnitCore.run(JUnitCore.java:157) 
    at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:71) 
    at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:199) 
    at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:62) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120) 
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'loadTimeWeaver': Initialization of bean failed; nested exception is java.lang.IllegalStateException: ClassLoader [sun.misc.Launcher$AppClassLoader] does NOT provide an 'addTransformer(ClassFileTransformer)' method. Specify a custom LoadTimeWeaver or start your Java virtual machine with Spring's agent: -javaagent:org.springframework.instrument.jar 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:527) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:291) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:288) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) 
    at org.springframework.context.weaving.LoadTimeWeaverAwareProcessor.postProcessBeforeInitialization(LoadTimeWeaverAwareProcessor.java:95) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:394) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1413) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519) 
    ... 37 more 
Caused by: java.lang.IllegalStateException: ClassLoader [sun.misc.Launcher$AppClassLoader] does NOT provide an 'addTransformer(ClassFileTransformer)' method. Specify a custom LoadTimeWeaver or start your Java virtual machine with Spring's agent: -javaagent:org.springframework.instrument.jar 
    at org.springframework.context.weaving.DefaultContextLoadTimeWeaver.setBeanClassLoader(DefaultContextLoadTimeWeaver.java:83) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeAwareMethods(AbstractAutowireCapableBeanFactory.java:1436) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1408) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519) 
    ... 46 more 

내 응용 프로그램 컨텍스트가 포함

<context:load-time-weaver/> 

그리고 내 치어 포함을 :

<dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-aspects</artifactId> 
      <version>${org.springframework.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-agent</artifactId> 
      <version>2.5.6</version> 
      <scope>test</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.aspectj</groupId> 
      <artifactId>aspectjrt</artifactId> 
      <version>1.6.10</version> 
     </dependency> 
    ... 
    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-surefire-plugin</artifactId> 
       <configuration> 
        <forkMode>always</forkMode> 
        <argLine> 
         -javaagent:${settings.localRepository}/org/springframework/spring-agent/2.5.6/spring-agent-2.5.6.jar 
        </argLine> 
       </configuration> 
      </plugin> 
     </plugins> 
    </build> 

스프링 에이전트를로드 할 수없는 것처럼 보이지만 그 이유를 파악할 수 없습니다. 귀하의 도움에 미리 감사드립니다.

+0

동일한 문제가있었습니다. 여기를 확인하십시오 : http://stackoverflow.com/a/26991278/449370 – Guito

답변

1

당신이 시도하고 다음과 같은 에이전트로 전환 할 수 있습니다 :

-javaagent:C:\Users\YourName\.m2\repository\org\aspectj\aspectjweaver\1.6.10.RC1\aspectjweaver-1.6.10.RC1.jar 
3

은 STS에서 VM 인수이 추가 또는 -javaagent 일식 : C : \\ 스프링 instrument.jar

+1

이중 슬래시가 필요하지 않습니다. 하나는 Windows에서 Eclipse 용입니다.) –

+0

좋은 요점. 감사합니다 – vsingh

+2

pom.xml에 넣을 위치는 어디입니까? – gstackoverflow

0

, 가산 jar 파일을 실행 구성의 VM Arg 's에 보내면 이전 포스터와 마찬가지로 나에게 트릭을 보냈다. STS 3.6.3에서 실행 -> 실행 구성 -> MyTcServerEntry -> 인수 탭을 선택하고 jar 파일을 추가합니다. 내 예제는 다음과 같습니다. -javaagent : "D : \ sts-3.6.3 \ sts-bundle \ tcServer-2.6.5 \ myApp \ lib \ spring-instrument-3.0.5.RELEASE.jar"

3

InstrumentationLoadTimeWeaver 빈을 명시 적으로 사용하는 대신 -javaagent : /path/to/org.springframework.instrument- {version} .jar를 사용하십시오.

그것을 사용하려면 문서에 따라, 당신은 봄 에이전트, 다음 JVM 옵션을 제공하여 가상 컴퓨터를 시작해야합니다

-javaagent : /path/to/org.springframework.instrument- {버전 } .jar

VM 시작 스크립트를 수정해야 응용 프로그램 서버 환경에서 (작업 정책에 따라)이 스크립트를 사용할 수 없으므로주의해야합니다. 또한 JDK 에이전트는 전체 VM을 계측하므로 비용이 많이 듭니다.

아래의 방법을 수행하는 것이 더 좋을 것이라고 기대하고 있습니다.

@Bean 
public InstrumentationLoadTimeWeaver loadTimeWeaver() throws Throwable { 
InstrumentationLoadTimeWeaver loadTimeWeaver = new InstrumentationLoadTimeWeaver(); 
return loadTimeWeaver; 
} 

동일한 구성이 xml 구성에서 수행 될 수 있습니다.

0

당신은 Tomcat이 리눅스 서버에 대한 Windows 또는 catalina.sh에 대한 catalina.bash에 다음을 추가하려고 사용하는 경우

설정 CATALINA_OPTS = % CATALINA_OPTS % -javaagent : "C : \ 경로 \ 봄 \하기를 -instrument-3.1.1.RELEASE.jar "

Tomcat 버전 7.0.55 이하에서만 작동한다는 점에 유의하십시오. 그 후에 그것을 가져 가지 않을 것이다. 그리고 여기에 언급 된 context.xml에 추가해야합니다. load-time-weaver (aspectj-weaver) is not working in apache tomcat 7.0.55.

관련 문제