Configuração de projeto com Vraptor 4

Eu estou tentando criar um projeto web usando o Vraptor 4. Na hora de rodar o servidor, diz que ele foi inicializado com sucesso. Mas quando acesso alguma página do site, dá erro. Segue a stack:

javax.enterprise.event.ObserverException at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) at java.lang.reflect.Constructor.newInstance(Unknown Source) at java.lang.Class.newInstance(Unknown Source) at org.jboss.weld.security.NewInstanceAction.run(NewInstanceAction.java:33) at java.security.AccessController.doPrivileged(Native Method) at org.jboss.weld.injection.Exceptions.rethrowException(Exceptions.java:40) at org.jboss.weld.injection.Exceptions.rethrowException(Exceptions.java:78) at org.jboss.weld.injection.MethodInjectionPoint.invokeOnInstanceWithSpecialValue(MethodInjectionPoint.java:101) at org.jboss.weld.event.ObserverMethodImpl.sendEvent(ObserverMethodImpl.java:266) at org.jboss.weld.event.ObserverMethodImpl.sendEvent(ObserverMethodImpl.java:253) at org.jboss.weld.event.ObserverMethodImpl.notify(ObserverMethodImpl.java:232) at org.jboss.weld.event.ObserverNotifier.notifyObserver(ObserverNotifier.java:169) at org.jboss.weld.event.ObserverNotifier.notifyObserver(ObserverNotifier.java:165) at org.jboss.weld.event.ObserverNotifier.notifyObservers(ObserverNotifier.java:119) at org.jboss.weld.event.ObserverNotifier.fireEvent(ObserverNotifier.java:112) at org.jboss.weld.event.EventImpl.fire(EventImpl.java:83) at br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:116) 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:222) 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:99) at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929) 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:1002) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:585) at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310) at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at java.lang.Thread.run(Unknown Source) Caused by: java.lang.NoSuchMethodError: com.google.common.collect.FluentIterable.toSet()Lcom/google/common/collect/ImmutableSet; at br.com.caelum.vraptor.http.route.DefaultRouter.routesMatchingUri(DefaultRouter.java:152) at br.com.caelum.vraptor.http.route.DefaultRouter.routesMatchingUriAndMethod(DefaultRouter.java:131) at br.com.caelum.vraptor.http.route.DefaultRouter.parse(DefaultRouter.java:111) at br.com.caelum.vraptor.http.route.DefaultRouter$Proxy$_$$_WeldClientProxy.parse(Unknown Source) at br.com.caelum.vraptor.http.DefaultControllerTranslator.translate(DefaultControllerTranslator.java:63) at br.com.caelum.vraptor.http.DefaultControllerTranslator$Proxy$_$$_WeldClientProxy.translate(Unknown Source) at br.com.caelum.vraptor.observer.RequestHandlerObserver.handle(RequestHandlerObserver.java:84) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.jboss.weld.injection.MethodInjectionPoint.invokeOnInstanceWithSpecialValue(MethodInjectionPoint.java:93) ... 25 more

O que pode ser?

Caused by: java.lang.NoSuchMethodError: com.google.common.collect.FluentIterable.toSet()Lcom/google/common/collect/ImmutableSet;

isso provavelmente é a versão do guava…

vc tem mais de uma versão no classpath? qual é a versão que vc tem?

Acho que não tenho nenhuma versão do Guava. As dependências que tenho no meu pom.xml são as seguintes:
junit (v. 3.8.1)
javax.inject (v. 1)
weld-servlet-core (v. 2.1.2.Final)
weld-core-impl (v. 2.1.2.Final)
slf4j-log4j12 (v. 1.7.5)
hibernate-validator-cdi (v. 5.1.1.Final)
vraptor (v. 4.0.0.Final)

Tem alguma outra dependência que eu tenho que adicionar pro projeto funcionar? O próprio VRaptor já não depende do Guava?

roda um mvn dependency:tree e veja como o guava aparece

O Vraptor não tá buscando nenhuma versão do Guava. Mas o weld-core-impl tá: com.google.guava:guava:jar:13.0.1:compile

Se quiser ver a árvore completa, segue ela abaixo:

+- junit:junit:jar:3.8.1:test +- javax.inject:javax.inject:jar:1:compile +- org.jboss.weld.servlet:weld-servlet-core:jar:2.1.2.Final:compile | +- org.jboss.weld:weld-spi:jar:2.1.Final:compile | +- org.jboss.spec.javax.el:jboss-el-api_3.0_spec:jar:1.0.0.Alpha1:compile | \- org.jboss.logging:jboss-logging:jar:3.1.3.GA:compile +- org.jboss.weld:weld-core-impl:jar:2.1.2.Final:compile | +- javax.enterprise:cdi-api:jar:1.1:compile | +- org.jboss.weld:weld-api:jar:2.1.Final:compile | +- org.jboss.classfilewriter:jboss-classfilewriter:jar:1.0.4.Final:compile | +- org.jboss.spec.javax.annotation:jboss-annotations-api_1.2_spec:jar:1.0.0.Alpha1:compile | +- com.google.guava:guava:jar:13.0.1:compile | \- org.jboss.spec.javax.interceptor:jboss-interceptors-api_1.2_spec:jar:1.0.0.Alpha3:compile +- org.slf4j:slf4j-log4j12:jar:1.7.5:compile | +- org.slf4j:slf4j-api:jar:1.7.5:compile | \- log4j:log4j:jar:1.2.17:compile +- org.hibernate:hibernate-validator-cdi:jar:5.1.1.Final:compile | \- org.hibernate:hibernate-validator:jar:5.1.1.Final:compile | \- com.fasterxml:classmate:jar:1.0.0:compile \- br.com.caelum:vraptor:jar:4.0.0.Final:compile +- br.com.caelum:iogi:jar:1.0.0:compile +- org.javassist:javassist:jar:3.18.1-GA:compile +- net.vidageek:mirror:jar:1.6.1:compile +- com.thoughtworks.paranamer:paranamer:jar:2.6:compile +- com.thoughtworks.xstream:xstream:jar:1.4.7:compile | +- xmlpull:xmlpull:jar:1.1.3.1:compile | \- xpp3:xpp3_min:jar:1.1.4c:compile +- javax.annotation:javax.annotation-api:jar:1.2:compile +- javax.interceptor:javax.interceptor-api:jar:1.2:compile +- javax.ejb:javax.ejb-api:jar:3.2:compile | \- javax.transaction:javax.transaction-api:jar:1.2:compile +- com.google.code.gson:gson:jar:2.2.4:compile \- javax.validation:validation-api:jar:1.1.0.Final:compile

O VRaptor precisa do guava 15: https://github.com/caelum/vraptor4/blob/master/vraptor-core/pom.xml#L19-L23

Agora rodou, mas quando acesso uma rota do meu site, não tá caindo no meu controller. Segue o código do meu controller:

[code]@Controller
public class PagesController {

@Path("/")
public void index() {
	System.out.println("index");

}

}[/code]
E esta é a configuração do meu web.xml:

[code]
org.jboss.weld.environment.servlet.Listener

<filter>
	<filter-name>vraptor</filter-name>
	<filter-class>br.com.caelum.vraptor.VRaptor</filter-class>
</filter>
<filter-mapping>
	<filter-name>vraptor</filter-name>
	<url-pattern>/*</url-pattern>
	<dispatcher>FORWARD</dispatcher>
	<dispatcher>REQUEST</dispatcher>
</filter-mapping>[/code]

Pelo que eu entendi, agora se usa a annotation @Controller no lugar de @Resource, certo? Porque não está funcionando?
Outra dúvida: se o Vraptor depende do Guava 15, porque ele não adiciona essa dependência?

Ah sim, e uma coisa que eu reparei é que quando eu inicio o servidor, não aparece no console as rotas que o Vraptor reconheceu no meu site, como costumava acontecer…

aparece algum tipo de erro? nos logs?

vc tem o beans.xml na sua pasta src/main/resources/META-INF? (mesmo que vazio?)

Não aparece nenhum erro. No navegador dá erro 404.
Não tenho esse beans.xml não. Eu usei o archetype padrão do maven pra aplicações web. Nesse arquetype a pasta META-INF fica no caminho src/main/resources/webapp. Eu devo colocar o beans.xml nessa pasta ou na que vc falou mesmo?

Coloquei o beans.xml vazio na pasta que você falou e funcionou! \o/
Obrigado, Lucas.

Olá Lucas… estou reabrindo o tópico, pois estou com problemas para fazer rodar um projeto VRaptor 4, Java 8, Tomcat 8… está dando o mesmo erro do primeiro post desse tópico… mas o detalhe é que já coloquei versão mais atualizada do Guava: Testei a versão 15, 17 e 18… também tenho o bean.xml no projeto já, mas o erro continua… também testei com o Glassfish 4.1, e dá o mesmo erro… roda sabe me dar alguma luz quanto a isso?

Caused by: java.lang.NoSuchMethodError: com.google.common.collect.FluentIterable.toSet()Lcom/google/common/collect/ImmutableSet; at br.com.caelum.vraptor.http.route.DefaultRouter.routesMatchingUri(DefaultRouter.java:152) at br.com.caelum.vraptor.http.route.DefaultRouter.routesMatchingUriAndMethod(DefaultRouter.java:131) at br.com.caelum.vraptor.http.route.DefaultRouter.parse(DefaultRouter.java:111) at br.com.caelum.vraptor.http.DefaultControllerTranslator.translate(DefaultControllerTranslator.java:63) at br.com.caelum.vraptor.http.DefaultControllerTranslator$Proxy$_$$_WeldClientProxy.translate(Unknown Source) at br.com.caelum.vraptor.observer.RequestHandlerObserver.handle(RequestHandlerObserver.java:91) 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:483) at org.jboss.weld.injection.MethodInjectionPoint.invokeOnInstanceWithSpecialValue(MethodInjectionPoint.java:90) ... 38 more

Obs: não estou usando Maven… e no Wildfly 8.1.0 Final roda beleza…

agradeço a atenção

Isso quer dizer que vc tá usando uma versão do guava incompatível com a do VRaptor.

Tente usar a mesma declarada no pom.xml do VRaptor:

(versão 15)

Oii pessoal, seguinte, consegui resolver o problema e foi mais bizarro do que achei que fosse, e até por conta disso que demorei para encontrar a solução… Eu já estava ligado nesse erro do Guava (que tinha que atualizar e tals), mas como eu já tinha atualizado, não poderia ser esse o problema…

para minha surpresa, repassando e abrindo todas as Libs que eu tinha no meu projeto, me deparei com a seguinte cena: “Dentro da lib weld-servlet.jar tinha toda a estrutura de pacotes e classes do Guava, além da própria estrutura do pacote weld… e o mais bizarro foi que a versão era a 13… bom, o que fiz foi deletar os pacotes e classes do Guava de dentro da lib e deixar apenas o Guava 18 no projeto (fora da lib do weld)… e BINGO!! Problema resolvido!!”

Fica aí a dica para o pessoal que enfrentou, enfrenta ou enfrentará esse problema… já vi isso acontecer com outras libs em outros projetos, mas não tinha me ligado logo que pudesse ser isso… sempre que você enfrentar um problema que parecer ser lib faltando, conflito de lib, mas que persiste mesmo depois de você colocar/atualizar as libs, tente ver se dentro de alguma outra lib não tem a estrutura da lib que está dando problema #FicaADica

muito obrigado a todos

Eu tive um problema semelhante, e depois de analisar vi que o iogi esta utilizando a dependência do guava 11. Para resolver eu fiz algo assim:

Forcei a exclusão do iogi na dependencia e inclui ele manualmente ignorando o guava, assim ficou usando somente o guava 15 que é dependencia do vraptor

      <dependency>
	    <groupId>br.com.caelum</groupId>
	    <artifactId>vraptor</artifactId>
	    <version>4.1.0.Final</version>
            <exclusions>
                <exclusion>
                    <groupId>br.com.caelum.iogi</groupId>
                    <artifactId>iogi</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>br.com.caelum</groupId>
            <artifactId>iogi</artifactId>
            <version>1.0.0</version>
            <exclusions>
                <exclusion>
                    <groupId>com.google.guava</groupId>
                    <artifactId>guava</artifactId>                    
                </exclusion>
            </exclusions>
        </dependency>

Eu estou com o mesmo problema, mas meu pom.xml não poderia ser mais simples, é só um projeto pequeno do zero sem nada ainda.

[code] <dependencies>

    &lt;dependency&gt;
        &lt;groupId&gt;br.com.caelum&lt;/groupId&gt;
        &lt;artifactId&gt;vraptor&lt;/artifactId&gt;
        &lt;version&gt;4.1.2&lt;/version&gt; &lt;!--or the latest version--&gt;
    &lt;/dependency&gt;
&lt;/dependencies&gt;[/code]

Eu não sei como utilizar esse comando: mvn dependency:tree

Estou usando o Glassfish 4.1 pelo Netbeans. Alguma luz?

Estou com o mesmo problema. Estou a dias atrás de alguma solução. Você conseguiu resolver?

Pessoal, estou novamente com este problema. No passado, resolvi, mas nao sei como. Verifiquei a arvore de dependencias e a unica dependencia do guava é a do vraptor, a 15. O que posso estar fazendo errado?