Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Consequências de se configurar a API no POM quando o servidor já tem uma por padrão

Pessoal, conforme explicação da aula:

"O problema ocorre porque o jsp é uma Servlet debaixo dos panos e precisamos que a classe HttpServlet esteja disponível no classpath. O mesmo problema ocorreria se tentássemos criar uma Servlet: não conseguiríamos herdar de HttpServlet.

O projeto funciona bem no Jetty pelo fato de que o servidor já possui uma implementação da API de Servlets e disponibiliza para o nosso arquivo war.

Porém como o Eclipse não consegue encontrar a classe nesse momento, ele indica o erro. Para resolver isso, e inclusive sermos capazes de criar uma Servlet, adicione a API nas dependências do pom.xml"

  1. Quando eu add a dependência do Servlet manualmente, ao rodar o servidor (no caso o Jetty) ele vai usar a implementação dele ou a minha?

  2. Configurar essas APIs manualmente pelo pom não pode acabar gerando algum conflito com o servidor? Afinal, ele já tá preparado para rodar na versão X de uma api, não?

Abraços, Fernando.

2 respostas

Ao terminar o curso, já descobri parte da resposta da segunda pergunta: O recomendável é delegar certas bibliotecas para o servidor prover. Para em tempo de compilação ser possível acessá-las, para isso basta colocar o escopo 'provided'.

O escopo 'provided' faz com que a dependência esteja disponível pelo Maven em tempo de compilação, porém em tempo de execução quem fornece é o servidor.

Sendo assim, já que existe a "recomendação", suponho que a resposta da primeira pergunta seja: o servidor vai usar a biblioteca fornecida pelo Maven na fase package, caso ela não seja de escopo 'provided'. Só preciso da confirmação de alguém mais experiente para sabe se o pensamento agora está correto.

Abraços.

solução!

Oi Fernando

Tudo que fica em provided não será usado pelo servidor, ele é usado em tempo de execução. No caso mais classico, a gente usa o jar do servlet como provided, pois quando usamos o servidor web o jar já está lá para compilar as classes.

https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#Dependency_Scope