Vraptor - guava Reflections - java.lang.NoClassDefFoundError

Pessoal,

Estou tentando usar a classe Reflections do guava para buscar métodos anotados:

ConfigurationBuilder configurationBuilder = new ConfigurationBuilder();
configurationBuilder.setUrls(ClasspathHelper.forPackage("br.com.mypackage");
configurationBuilder.setScanners(new MethodAnnotationsScanner());

Reflections reflections = new Reflections(configurationBuilder);
Set<Method> methods = reflections.getMethodsAnnotatedWith(MyAnnotation.class);

Porém recebo o seguinte erro:

Hoje o Vraptor usa a jar do guava na versão r07. Se eu atualizar para o último download do site (guava-11.0.2.jar) o meu código funciona ok. Porém o fileupload para de funcionar. Segue a stack:

java.lang.NoSuchMethodError: com.google.common.collect.ImmutableList.of([Ljava/lang/Object;)Lcom/google/common/collect/ImmutableList;
	at br.com.caelum.iogi.parameters.Parameter.computeNameComponents(Parameter.java:29)
	at br.com.caelum.iogi.parameters.Parameter.<init>(Parameter.java:14)
	at br.com.caelum.vraptor.http.iogi.IogiParametersProvider.parseParameters(IogiParametersProvider.java:113)
	at br.com.caelum.vraptor.http.iogi.IogiParametersProvider.getParametersFor(IogiParametersProvider.java:60)
	at br.com.caelum.vraptor.interceptor.ParametersInstantiatorInterceptor.getParametersFor(ParametersInstantiatorInterceptor.java:126)
	at br.com.caelum.vraptor.interceptor.ParametersInstantiatorInterceptor.intercept(ParametersInstantiatorInterceptor.java:83)
	at br.com.caelum.vraptor.core.LazyInterceptorHandler.execute(LazyInterceptorHandler.java:59)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	at br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:69)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	at br.com.caelum.vraptor.interceptor.multipart.CommonsUploadMultipartInterceptor.intercept(CommonsUploadMultipartInterceptor.java:136)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	at br.com.caelum.vraptor.core.EnhancedRequestExecution.execute(EnhancedRequestExecution.java:44)
	at br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:91)
	at br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:58)
	at br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:88)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:225)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1001)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:585)
	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)

No pacote do guava tem outras libs (ex. javassist-3.12.1.GA). Pensei em atualizá-las, porém vejo que uma delas é de versão anterior ao que o vraptor está usando (javassist-3.14.0.GA.jar). E também não sei se isso tem a ver com este problema.

Se não houver solução vou fazer a reflection sem o uso do guava com java puro mesmo :frowning:

Obrigado e até mais,

oi danilo, nao consigo te ajudar no seu problema com o guava. Estou acompanhando o topico para ver a solução tb.

Porem se tiver de fazer reflection aconselho dar uma olhada no MIRROR DSL. Já usei bastante e foi bem satisfatório

abrasss

atualize o guava pra última versão e o iogi pra última versão:

http://repo1.maven.org/maven2/br/com/caelum/iogi/0.9.1/iogi-0.9.1.jar

[quote=Lucas Cavalcanti]atualize o guava pra última versão e o iogi pra última versão:

http://repo1.maven.org/maven2/br/com/caelum/iogi/0.9.1/iogi-0.9.1.jar[/quote]

Se não me engano, em uns testes que eu fiz no passado, precisa atualizar o mirror para a última versão também.

Olá,

Já estou usando o iogi-0.9.1.jar

fizeram essa correção no iogi, mas não foi feito o release ainda…

se importa de baixar o source e gerar a versão?

se quiser eu faço isso pra você…

posso fazer o release tb, em breve

Obrigado Lucas Cavalcanti!

Problema resolvido…

Resolução:

  • Baixei e fiz o build do Iogi
  • Baixei a útlima versão do guava (guava-12.0.1.jar)
  • Atualizei as JARs no projeto

Com isso voltou a funcionar:

  • Reflections (para minha app buscar métodos anotados)
  • File upload

Até mais,

Tenho que mudar o título para [resolvido]? Não achei isso nas regras do fórum…

Só uma observação: o reflections não é do Guava :wink:

Sim sim …