2016-09-23 20 views
2

私は本当にここで困っています。私たちのSpringライブラリを4.0.6から4.3.2にアップグレードしました。質問:ClassFormatError:EnhancerBySpringCGLIBのメソッド名と署名が重複しています

@Bean(name = SCHEDULER_FACTORY) 
public SchedulerFactoryBean getSchedulerFactory() 
{ 
    SchedulerFactoryBean schedulerFactory = new SchedulerFactoryBean(); 
    schedulerFactory.setConfigLocation(schedulerConfig); 
    schedulerFactory.setResourceLoader(null); 
    schedulerFactory.setDataSource(dataSource); 
    schedulerFactory.setJobFactory(getSchedulerJobFactory()); 
    schedulerFactory.setAutoStartup(false); 

    return schedulerFactory; 
} 

@Bean(name = SCHEDULER) 
public Scheduler getScheduler() 
{ 
    return getSchedulerFactory().getScheduler(); 
} 

私はエラーjava.lang.ClassFormatError: Duplicate method name&signature in class file org/springframework/scheduling/quartz/SchedulerFactoryBean$$EnhancerBySpringCGLIB$$bee87fe8$$EnhancerBySpringCGLIB$$6bb26669を取得しています春4.0.6フレームワークを使用してテストを実行

は完全に正常に動作しますが、4.0.6を使用する場合は4.3.2で、それは失敗だ、私は。。依存関係ライブラリcglibを使用していませんでした。4.3.2では、cglibを使用するかどうかに関係なく、テストは失敗します。

Springは4.3。*コアライブラリにcglibとobjensisを埋め込みます。さらに、Spring Framework 4.3では、spring-core.jarに更新されたASM 5.1、CGLIB 3.2.4、およびObjenesis 2.4が組み込まれています。 SpringDocs

Springフレームワーク4.0.6でJava 8とcglib-no-dep 2.2を使用していました。このコードをスタンドアロンライブラリの有無にかかわらず試してみましたが、同じ結果が表示されます。

スタックトレース:

Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.quartz.Scheduler]: Factory method 'getScheduler' threw exception; nested exception is org.springframework.cglib.core.CodeGenerationException:java.lang.reflect.InvocationTargetException >null 
      at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:189) 
      at org.springframework.beans.factory.support.ConstructorResolver$3.run(ConstructorResolver.java:582) 
      at java.security.AccessController.doPrivileged(Native Method) 
      at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:579) 
      ... 112 more 
    Caused by: org.springframework.cglib.core.CodeGenerationException: java.lang.reflect.InvocationTargetException >null 
      at org.springframework.cglib.core.AbstractClassGenerator.generate(AbstractClassGenerator.java:345) 
      at org.springframework.cglib.proxy.Enhancer.generate(Enhancer.java:492) 
      at org.springframework.cglib.core.AbstractClassGenerator$ClassLoaderData$3.apply(AbstractClassGenerator.java:93) 
    Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 188.486 sec 
      at org.springframework.cglib.core.AbstractClassGenerator$ClassLoaderData$3.apply(AbstractClassGenerator.java:91) 
      at org.springframework.cglib.core.internal.LoadingCache$2.call(LoadingCache.java:54) 
      at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
      at org.springframework.cglib.core.internal.LoadingCache.createEntry(LoadingCache.java:61) 
      at org.springframework.cglib.core.internal.LoadingCache.get(LoadingCache.java:34) 
      at org.springframework.cglib.core.AbstractClassGenerator$ClassLoaderData.get(AbstractClassGenerator.java:116) 
      at org.springframework.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:291) 
      at org.springframework.cglib.proxy.Enhancer.createHelper(Enhancer.java:480) 
      at org.springframework.cglib.proxy.Enhancer.createClass(Enhancer.java:337) 
      at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.enhanceFactoryBean(ConfigurationClassEnhancer.java:452) 
      at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:338) 
      at com.example.SpringConfiguration$$EnhancerBySpringCGLIB$$54d3cb35.getSchedulerFactory(<generated>) 
      at com.example.SpringConfiguration.getScheduler(SpringConfiguration.java:242) 
      at com.example.SpringConfiguration$$EnhancerBySpringCGLIB$$54d3cb35.CGLIB$getScheduler$24(<generated>) 
      at com.example.SpringConfiguration$$EnhancerBySpringCGLIB$$54d3cb35$$FastClassBySpringCGLIB$$a2a6e004.invoke(<generated>) 
      at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228) 
      at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:356) 
      at com.example.SpringConfiguration$$EnhancerBySpringCGLIB$$54d3cb35.getScheduler(<generated>) 
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
      at java.lang.reflect.Method.invoke(Method.java:498) 
      at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:162) 
      ... 115 more 
    Caused by: java.lang.reflect.InvocationTargetException 
      at sun.reflect.GeneratedMethodAccessor26.invoke(Unknown Source) 
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
      at java.lang.reflect.Method.invoke(Method.java:498) 
      at org.springframework.cglib.core.ReflectUtils.defineClass(ReflectUtils.java:413) 
      at org.springframework.cglib.core.AbstractClassGenerator.generate(AbstractClassGenerator.java:336) 
      ... 140 more 
    Caused by: java.lang.ClassFormatError: Duplicate method name&signature in class file org/springframework/scheduling/quartz/SchedulerFactoryBean$$EnhancerBySpringCGLIB$$bee87fe8$$EnhancerBySpringCGLIB$$6bb26669 
      at java.lang.ClassLoader.defineClass1(Native Method) 
      at java.lang.ClassLoader.defineClass(ClassLoader.java:763) 
      ... 145 more 

答えて

0

これはdefinetly CGLIBのバグです。タイプ階層内のメソッドを他のメソッドと等しくなるように正しく決定しないようです。 Java 8をインターフェースのデフォルトメソッドと組み合わせて使用​​していますか?

Cglibは現代のJavaのバージョンでは実際にテストされておらず、ほとんどメンテナンスが行われていません。新しい機能では、ライブラリを使用する際に問題が発生することがあります。

+0

春は、4.3。*コアライブラリにcglibとobjensisを埋め込みます。 "さらに、Spring Framework 4.3では、spring-core.jarに更新されたASM 5.1、CGLIB 3.2.4、およびObjenesis 2.4が組み込まれています。 http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#_support_for_new_library_and_server_generations Springフレームワーク4.0.6でJava 8とcglib-no-dep 2.2を使用していました。このコードをスタンドアロンライブラリの有無にかかわらず試してみましたが、同じ結果が表示されます。 CGLIBには問題があり、Springでは問題ではないと確信しているのはなぜですか? – user3416827

+0

Java仮想マシンがクラスファイルを読み込もうとしたときに 'ClassFormatError'がスローされ、そのファイルが不正であると判断した場合やクラスファイル*として解釈できない場合に発生します。指定されたライブラリのうち、cglibのみがランタイムjarファイルを生成します。 –

関連する問題