5
respostas

Maven+Jetty+Problema Spring

Quando executo o comando mvn jetty:run o servidor sober, porém ao invés do index.jsp aparece a mensagem: "HTTP ERROR 503 Service Unavailable".

No console aparece essa mensagem:


java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener
    at org.codehaus.plexus.classworlds.strategy.SelfFirstStrategy.loadClass(SelfFirstStrategy.java:50)
    at org.codehaus.plexus.classworlds.realm.ClassRealm.unsynchronizedLoadClass(ClassRealm.java:271)
    at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:247)
    ...

Meu pom está desta forma:

<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.alura.maven</groupId>
    <artifactId>lojaweb</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <packaging>war</packaging>

    <name>A custom project</name>
    <url>http://www.haoxuer.com</url>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>5.1.5.RELEASE</version>
        </dependency>

    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.eclipse.jetty</groupId>
                <artifactId>jetty-maven-plugin</artifactId>
                <version>9.4.32.v20200930</version>

            </plugin>
        </plugins>
    </build>

</project>

Obs: inseri a dependência do Spring, porém o resultado continuou o mesmo.

Agradeço a quem possa me dar uma luz para acabar com esse erro!

5 respostas

Olá Gilmar, tudo bem ?

Aparentemente as classes do Spring não estão no classpath do projeto.

Abra as propriedades do projeto (por exemplo, clique com o botão direito do mouse no nome do projeto no explorador de projetos e selecione "Propriedades"). Selecione "Montagem de implantação". Clique no botão "Adicionar ..." na margem direita. Selecione "Java Build Path Entries" no menu do tipo de diretiva e clique em "Next". Selecione "Dependências Maven" no menu Java Build Path Entries e clique em "Concluir". Você deve ver "Dependências Maven" adicionadas à definição do Web Deployment Assembly.

Ainda não deu certo.

As dependência do Maven estão aparecendo normalmente (Na view "Project Explorer", aparecem em "Projeto -> Java Resources -> Libraries" logo abaixo de JRE System Library).

Como achei que podia ser a falta de alguma dependência do Spring, resolvi colocar a dependência no POM. Como ainda não deu resultado, resolvi setar a versão do Java para a 11 - por padrão o Eclipse estava colocado a 1.5 - e também não mudou nada.

Atualmente meu POM está assim:

<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.alura.maven</groupId>
    <artifactId>lojaweb</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <packaging>war</packaging>

    <name>A custom project</name>
    <url>http://www.haoxuer.com</url>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>5.1.5.RELEASE</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.eclipse.jetty</groupId>
                <artifactId>jetty-maven-plugin</artifactId>
                <version>9.4.0.M0</version>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.0</version>
                <configuration>
                    <release>11</release>
                </configuration>
            </plugin>

        </plugins>

    </build>

</project>

Será que o pom está com algum problema?

Verifiquei foi gerado automaticamente um arquivo chamado "ApplicationContext.xml", o qual segue abaixo:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jee="http://www.springframework.org/schema/jee"
    xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context"
    xmlns:cache="http://www.springframework.org/schema/cache"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
    http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee.xsd
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
    http://www.springframework.org/schema/cache   
    http://www.springframework.org/schema/cache/spring-cache.xsd"
    default-lazy-init="true">

    <context:annotation-config />
    <context:component-scan base-package="com.quhaodian.user" />
    <context:component-scan base-package="com.quhaodian.site" />
    <context:component-scan base-package="com.quhaodian.area" />
    <context:component-scan base-package="com.quhaodian.web" />
    <context:component-scan base-package="com.quhaodian.plug" />
    <context:component-scan base-package="com.quhaodian.quartz" />
    <context:component-scan base-package="com.quhaodian.notice" />
    <context:component-scan base-package="com.quhaodian.workflow" />


    <!-- 对包中的所有类进行扫描,以完成Bean创建和自动依赖注入的功能 需要更改 -->
    <context:component-scan base-package="com.quhaodian" />

    <bean id="propertyConfigurer"
        class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations">
            <list>
                <value>classpath:jdbc.properties</value>
                <value>classpath:site.properties</value>
            </list>
        </property>
    </bean>
    <bean id="treeInterceptor" class="com.quhaodian.common.hibernate.TreeIntercptor" />

    <bean id="dataSource"
        class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="${jdbc.driverClassName}" />
        <property name="url" value="${jdbc.url}" />
        <property name="username" value="${jdbc.username}" />
        <property name="password" value="${jdbc.password}" />
    </bean>
    <bean id="sessionFactory"
        class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="hibernateProperties">

            <props>
                <prop key="hibernate.dialect">org.hibernate.dialect.MySQL55Dialect</prop>
                <prop key="hibernate.show_sql">false</prop><!-- -->
                <prop key="hibernate.format_sql">true</prop>
                <prop key="hibernate.hbm2ddl.auto">update</prop> <!--none update  create create-drop validate-->
                <prop key="hibernate.jdbc.batch_size">20</prop>
            </props>
        </property>
        <property name="packagesToScan">
            <list>
                <value>com.quhaodian.user</value>
                <value>com.quhaodian.site</value>
                <value>com.quhaodian.web</value>
                <value>com.quhaodian.area</value>
                <value>com.quhaodian.plug</value>
                <value>com.quhaodian.quartz</value>
                <value>com.quhaodian.notice</value>
                <value>com.quhaodian.workflow.da

Será que o problema está aqui?

Não sei qual havia sido erro, mas resolvi apagar todo o projeto e começar do zero novamente... E deu certo.

Acho que na hora de escolher o archetype do maven, devo ter pego algum bem louco ao invés do básico.

Vlw pela atenção e ajuda Otavio Prado!

Opa, show GILMAR, por nada. Bons estudos!