Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

11
respostas

Erro ao subir o tomcat (weld servlet)

Olá configurei o projeto para utilizar o maven. Porém quando tento subir o tomcat com o projeto livraria-maven recebo o seguinte erro.

GRAVE: Error configuring application listener of class [org.jboss.weld.environment.servlet.Listener]
java.lang.ClassNotFoundException: org.jboss.weld.environment.servlet.Listener
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1269)
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1104)
    at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:508)
    at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:489)
    at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:119)
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4555)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5095)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1425)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1415)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
    at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:134)
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:941)
    at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:839)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1425)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1415)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
    at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:134)
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:941)
    at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:258)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
    at org.apache.catalina.core.StandardService.startInternal(StandardService.java:422)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
    at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:770)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
    at org.apache.catalina.startup.Catalina.start(Catalina.java:657)
    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.apache.catalina.startup.Bootstrap.start(Bootstrap.java:355)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:495)
11 respostas

Oi Fabio, tudo bem?

Qual versão do Tomcat vc está usando? De qualquer forma, uma tentativa seria remover o projeto do seu Eclipse, acessá-lo pelo terminal e rodar o comando mvn clean. Se mesmo assim não funcionar, posta o log completo do erro que a gnt tenta resolver =)

Olá Samir,

Estou usando o Tomcat 9.0. Removi o projeto do eclipse, executei o clean pelo terminal, mostrou um warning dizendo que tenho dependências duplicadas do primefaces mas executou com sucesso. Após isso importei novamente o projeto para o eclipse, fiz um run as -> clean compile package. Adicionei ao servidor tomcat e na hora se subir continuo recebendo o mesmo erro.

GRAVE: Error configuring application listener of class [org.jboss.weld.environment.servlet.Listener] java.lang.ClassNotFoundException: org.jboss.weld.environment.servlet.Listener

Fabio, No seu pom, Vc adicionou as dependências do cdi?

Olá Samir,

Adicionei essa dependência

<dependency>
            <groupId>org.jboss.weld.servlet</groupId>
            <artifactId>weld-servlet</artifactId>
            <version>2.3.2.Final</version>
        </dependency>

oi Fabio, tenta trocar por essa aqui:

<dependency>
      <groupId>javax.enterprise</groupId>
      <artifactId>cdi-api</artifactId>
      <scope>provided</scope>
    </dependency>

Olá Samir,

Troquei a dependência e o mesmo erro continua ocorrendo.

Fabio, o seu POM.xml esta como esse aqui?

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>br.com.caelum</groupId>
<artifactId>livraria-maven</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<name>Livraria Alura</name>
<properties>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependencies>
    <dependency>
        <groupId>org.jboss.weld.servlet</groupId>
        <artifactId>weld-servlet</artifactId>
        <version>2.3.3.Final</version>
    </dependency>
    <dependency>
        <groupId>javax.validation</groupId>
        <artifactId>validation-api</artifactId>
        <version>1.1.0.Final</version>
    </dependency>
    <dependency>
        <groupId>org.primefaces</groupId>
        <artifactId>primefaces</artifactId>
        <version>5.3</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.38</version>
    </dependency>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-entitymanager</artifactId>
        <version>5.1.0.Final</version>
    </dependency>
    <dependency>
        <groupId>com.sun.faces</groupId>
        <artifactId>jsf-api</artifactId>
        <version>2.2.13</version>
    </dependency>
    <dependency>
        <groupId>com.sun.faces</groupId>
        <artifactId>jsf-impl</artifactId>
        <version>2.2.13</version>
    </dependency>
    <dependency>
        <groupId>org.primefaces.themes</groupId>
        <artifactId>all-themes</artifactId>
        <version>1.0.10</version>
    </dependency>
</dependencies>
<repositories>
    <repository>
        <id>prime-repo</id>
        <name>PrimeFaces Maven Repository</name>
        <url>http://repository.primefaces.org</url>
        <layout>default</layout>
    </repository>
</repositories>
</project>

Olá Samir,

O pom.xml está exatamente igual ao que você passou.

OI Fabio, isso é bem estranho. O erro que esta dando esta dizendo que uma classe do CDI não foi encontrada, mas o POM que vc está usando está com as dependências corretas. Vamos fazer o seguinte: na pasta do seu usuário, existe uma pasta chamada .m2. Apague essa pasta e dê um update do Maven no projeto, isso fará com que todas as dependências sejam baixadas novamente.

Olá Samir, continua o mesmo erro, já conferi e a classe se encontra no classpath do projeto, mas quando sobe o tomcat não consegue encontrar.

Oi Fabio, esse erro pode estar relacionado à algum bug estranho...

vamos fazer o seguinte, baixa esse projeto aqui (é o mesmo do curso já com o maven, testado aqui na minha máquina) e tenta importar ele na sua máquina:

https://drive.google.com/file/d/0B2LZABXJX6IyWk1jODE4VUxlQ3c/view?usp=sharing

Para importar: Botão direito no Package Explorer > Import > Existing Maven Project e ai coloca o projeto descompactado.

Não esquece de colocar os seus dados do banco no Persistence.xml e de configurar o Java Compiler para 1.8

Veja se funciona =)