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

Dúvida sobre o uso de dependências

Boa noite, estou com uma dúvida a respeito do uso de certas dependências.

Pelo que eu entendi, se eu estiver utilizando o JSF por exemplo, e estiver usando o tomcat, eu preciso utilizar certas dependências para o funcionamento do JSF, além das configurações de xml e etc.

A minha dúvida é a seguinte, vamos supor que ao invés de utilizar o tomcat, eu esteja utilizando o glassfish, como o glassfish é um servidor JEE eu preciso ainda das mesmas dependências quando estou utilizando o tomcat ?

Obs: Eu tive essa dúvida depois de fazer o curso de JAX-RS, pois eu criei um novo projeto e coloquei apenas a dependência: javax javaee-api 7.0, eu achei q como estaria utilizando o glassfish, eu não precisaria colocar outras dependências, pois é um servidor JEE, e o que eu fosse utilizar(EJB por exemplo), o servidor já iria disponibilizar.

3 respostas

Fellipe, é exatamente isso.

O servidor de aplicação já possui a implementação instalada, basta você ativa-la no pom.xml através da dependência javaee.

Como o tomcat (na versão default) é apenas um servlet container, ele não disponibiliza por padrão esse tipo de implementação do javaee.

Você até pode usar as mesmas dependências que você utiliza no tomcat, mas se você não desabilitar as dependências que já estão no servidor de aplicação, é bem provável que você tenha problemas de conflito ou incompatibilidade de jars. O ideal é usar ou um ou outro.

solução!

Fala aí Felipe, blz?

Então quando você está em um servidor de aplicação as dependências serão providas em tempo de execução.

Porém em tempo de compilação, a menos que você tenha configura Server Runtime no eclipse, ou o equivalente em outro IDE você não vai conseguir compilar.

Para compilar você pode utilizar javax javaee-api 7.0 com o escopo de provided dessa forma tudo o que você utilizar da especificação, serão compilados mas em tempo de execução será usado as dependências do servidor de aplicação.

O problema de usar javax javaee-api 7.0, é que você quiser usar algo especifico de uma implementação, por exemplo caso você queira usar alguma feature especifica do EclipseLink (por exemplo) você não irá conseguir pois está fora da especificação. E nesse caso você pode usar uma dependência do EclipseLink com escopo provided também.

Espero ter ajudado!

Então deixa eu ver se entendi, caso eu queira utilizar algum recurso que não esteja na especificação, eu tenho que utilizar outras dependências, se eu for utilizar somente recursos que estão na especificação, eu utilizo apenas o javaee no maven como provided, mais se eu for utilizar outros recursos que não façam parte da especificação e estiver utilizando o javaee no maven, posso ter problemas de conflito.

Entendi certo?