Estou executando um projeto Maven que também é um projeto web dinâmico. Usei todas as bibliotecas do Spring no Maven. Eu criei web.xml
, mas quando inicio meu servidor Tomcat 7, recebo a seguinte mensagem:
INFO: validateJarFile(C:\Users\mibvzd0\workspace\.metadata\.plugins\
org.eclipse.wst.server.core\tmp2\wtpwebapps\hapi_hl7\WEB-INF\lib\
servlet-api-2.4.jar) - jar not loaded.
See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class
Tentei excluir o servlet de webapp/lib
, mas não funcionou. Deixe-me saber o que deve ser feito no meu caso.
Respostas:
O arquivo .jar da API do servlet não deve ser embutido no webapp, pois, obviamente, o contêiner já possui essas classes em seu classpath: ele implementa as interfaces contidas neste jar.
A dependência deve estar no
provided
escopo, em vez docompile
escopo padrão , em seu pom Maven:fonte
Você recebe esta mensagem de aviso quando o arquivo jar da API do servlet já foi carregado no contêiner e você tenta carregá-lo novamente do
lib
diretório.servlet.jar
do seulib
diretório.lib
diretório, procure seu caminho de construção e remova o jar.Se você estiver executando um projeto maven, altere a
javax.servlet-api
dependência para o escopoprovided
em seu pom.xml, uma vez que o contêiner já forneceu o jar do servlet em si.fonte
Para corrigir isso, defina o escopo como fornecido . Isso diz ao Maven para usar o código servlet-api.jar apenas para compilar e testar, mas NÃO incluí-lo no arquivo WAR. O contêiner implementado irá “fornecer” o servlet-api.jar no tempo de execução.
fonte
Você pode achar a seguinte linha de comando do Windows útil para rastrear o arquivo jar ofensivo. ele cria um índice de todos os arquivos de classe em todos os jars da pasta. Execute de dentro da pasta lib de seu aplicativo implantado e, em seguida, pesquise o arquivo index.txt para a classe ofensiva.
fonte
Escopo de dependência Maven
fonte
Tenho lutado com esse problema e tentei várias "soluções".
No entanto, no final, a única que funcionou e levou alguns segundos para fazer isso foi: deletar e adicionar de volta a nova instância do servidor !
Basicamente, cliquei com o botão direito do mouse em meu servidor Tomcat no Eclipse em Servidores e o excluí. Em seguida, adicionei um novo servidor Tomcat. Limpei e reimplantei o aplicativo e me livrei deste erro.
fonte
Verifique dentro do seguinte diretório o arquivo jar el-api.jar: C: \ apache-tomcat-7.0.39 \ lib \ el-api.jar se ele existe neste diretório de seu aplicativo da web WEB-INF \ lib \ el-api.jar o jar deve ser removido
fonte
quando o seu padrão de URL está errado, esse erro pode ocorrer.
por exemplo. Se você escreveu @WebServlet ("login"), esse erro será mostrado. O correto é @WebServlet ("/ login").
fonte
Exclusões e
provided
dependências não funcionarão em projetos filho.Se você estiver usando herança em projetos Maven, deverá incluir esta configuração no
pom.xml
arquivo pai . Você terá uma<parent>...</parent>
seção em seu pom.xml se estiver usando herança . Então você terá algo assim em seu paipom.xml
:fonte
A biblioteca de dependência JAX-WS “jaxws-rt.jar” está ausente.
Clique aqui http://jax-ws.java.net/ . Faça download da distribuição JAX-WS RI. Descompacte-o e copie “jaxws-rt.jar” para a pasta da biblioteca do Tomcat “{$ TOMCAT} / lib“. Reinicie o Tomcat.
fonte
Normalmente, quando você vê essa mensagem, é benigna. Se diz
Significa que ele está ignorando seu servlet-api-2.5.jar porque o tomcat já tem uma versão embutida desse jar, então não vai usar a sua. Normalmente, isso não causa um problema.
Se, no entanto, diz
WEB-INF/lib/my_jar.jar - jar not loaded...Offending class: javax/servlet/Servlet.class
então o que você pode fazer (no meu caso, é um jarro sombreado) é executar
Dependência de $ mvn: árvore
e descobrir que você tem uma dependência transitiva de "algo" que depende de um jar que é servlet-api ou algo parecido (ex:)
tomcat-servlet-api-9.0.0
. Portanto, adicione uma exclusão a isso ao seu pom, ex: (no meu caso, tomcat, no seu caso, provavelmente os mencionados nas outras respostas):fonte
Remova
servlet.jar
daweb-inf/lib
pasta de origem , pois está disponível nalib
pasta tomcat, então funciona bemfonte