2014-10-12 2 views
2

현재 Maven 3.1 이상에서 작동하는 maven 플러그인을 업데이트하려고합니다. 플러그인이 niceley를 사용하고있는 것으로 보이지만, 나는 testsuite를 최신 변경 사항으로 업데이트하는 데 정말로 어려움을 겪고 있습니다.이상한 클래스 캐스트 예외 추적

java.lang.ClassCastException: org.codehaus.plexus.DefaultPlexusContainer$LoggerManagerProvider cannot be cast to javax.inject.Provider 
at com.google.inject.internal.InternalFactoryToInitializableAdapter.get(InternalFactoryToInitializableAdapter.java:46) 
at com.google.inject.internal.SingleParameterInjector.inject(SingleParameterInjector.java:38) 
at com.google.inject.internal.SingleParameterInjector.getAll(SingleParameterInjector.java:62) 
at com.google.inject.internal.SingleMethodInjector.inject(SingleMethodInjector.java:84) 
at com.google.inject.internal.MembersInjectorImpl.injectMembers(MembersInjectorImpl.java:132) 
at com.google.inject.internal.MembersInjectorImpl$1.call(MembersInjectorImpl.java:93) 
at com.google.inject.internal.MembersInjectorImpl$1.call(MembersInjectorImpl.java:80) 
at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1059) 
at com.google.inject.internal.MembersInjectorImpl.injectAndNotify(MembersInjectorImpl.java:80) 
at com.google.inject.internal.Initializer$InjectableReference.get(Initializer.java:174) 
at com.google.inject.internal.Initializer.injectAll(Initializer.java:108) 
at com.google.inject.internal.InternalInjectorCreator.injectDynamically(InternalInjectorCreator.java:174) 
at com.google.inject.internal.InternalInjectorCreator.build(InternalInjectorCreator.java:110) 
at com.google.inject.Guice.createInjector(Guice.java:96) 
at com.google.inject.Guice.createInjector(Guice.java:73) 
at com.google.inject.Guice.createInjector(Guice.java:62) 
at org.codehaus.plexus.DefaultPlexusContainer.addPlexusInjector(DefaultPlexusContainer.java:481) 
at org.codehaus.plexus.DefaultPlexusContainer.<init>(DefaultPlexusContainer.java:206) 
at org.codehaus.plexus.DefaultPlexusContainer.<init>(DefaultPlexusContainer.java:168) 
at net.flexmojos.oss.plugin.compiler.DependencyFilteringTest.initPlexus(DependencyFilteringTest.java:66) 

이상한 일이 org.codehaus.plexus.DefaultPlexusContainer가의 일부이다 : 모두가 좋아 보인다,하지만 난 내있는 TestSuite에 다음과 같은 예외를 받고 있어요 MEE하기 힘든 LIB 버전 싸움을 싸우고 후 메이븐 : org.eclipse.sisu : org.eclipse.sisu.plexus : org.eclipse.sisu에 위치한 0.3.0.M1 라이브러리

final class org.codehaus.plexus.DefaultPlexusContainer.LoggerManagerProvider 
    implements org.eclipse.sisu.inject.DeferredProvider<LoggerManager> 

: org.eclipse.sisu.inject : 0.3.0 .M1 with

public interface org.eclipse.sisu.inject.DeferredProvider<T> 
    extends com.google.inject.Provider<T> 

org.sonatype.sisu 교부 : 시수 - guice : 3.2.4 그래서 결국에 LoggerManagerProvider가 javax.inject.Provider뿐만 아니라 com.google.inject.Provider뿐만 아니라해야

public interface com.google.inject.Provider<T> extends javax.inject.Provider<T> { 

와 ... 디버거에서 멈추고 확인하면 다음을 확인하십시오.

tst instanceof com.google.inject.Provider --> True 
tst instanceof javax.inject.Provider --> False 

어떻게 그럴 수 있습니까? 내 VM에는 나쁜 클래스 버전의 쓰레기가있는 것 같지만 어떻게 추적해야하는지에 대한 단서가 없다. 내 질문에 게시 된

크리스

+0

classpath에 jar의 다른 버전이 있습니까? – SMA

+0

pom 파일을 공유 할 수 있습니까? – Mzf

+0

방금이 기능을 사용하기 위해 필자의 기능을 변경했습니다 ... github https://github.com/chrisdutz/flexmojos/blob/feature/falcon-support/flexmojos-maven-plugin/pom.xml에서 사용할 수 있습니다. –

답변

1

좋아요 ... 클래스 계층 구조는 다음과 같습니다

org.codehaus.plexus.DefaultPlexusContainer.LoggerManagerProvider -> org.eclipse.sisu.inject.DeferredProvider - > com.google.inject.Provider -> javax.inject.Provider

클래스 경로에 하나의 org.eclipse.sisu.inject.DeferredProvider와 javax.inject.Provider가 하나만 포함되어 있는지 확인했습니다. 그러나 오늘 하나의 이상한 패키지가 com.google.inject.Provider의 다른 구현을 제공한다는 것을 알았습니다 ... 빌드에서 이것을 제외하고 모두 다시 좋은 :-)

Tattletale (http://tattletale.jboss.org/)과 비슷한 플러그인을 사용하는 것에 익숙해 져야한다고 생각합니다.

관련 문제