estou com duvida sobre essas dependencias, é a mesma coisa?
Essa
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>javax.faces</artifactId>
<version>2.2.14</version>
<scope>compile</scope>
</dependency>
Para Essas
<!-- https://mvnrepository.com/artifact/com.sun.faces/jsf-api -->
<dependency>
<groupId>com.sun.faces</groupId>
<artifactId>jsf-api</artifactId>
<version>2.2.14</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.sun.faces/jsf-impl -->
<dependency>
<groupId>com.sun.faces</groupId>
<artifactId>jsf-impl</artifactId>
<version>2.2.14</version>
</dependency>
Como JSF é uma especificação, você só precisa da primeira ou da segunda, mas não da terceira. Você só vai precisar da API para compilar o teu código. A implementação não é necessária, pois ela já está presente no container de aplicação (Wildfly ou glassfish, por exemplo). Quando você fizer deploy e tua aplicação for rodar no container, a implementação vai estar automagicamente no classpath e tudo funciona.
humm… No caso do Tomcat, tenho que colocar a implementação e a dependencia coreto?
Uma duvida e dessa forma:
Pelo que entendi, ele paga a ultima versão da dependencia e em uma tag eu informo qual versão quero usar?
<!-- Omnifaces -->
<omnifaces.version>2.1</omnifaces.version>
<dependencies>
<dependency>
<groupId>org.omnifaces</groupId>
<artifactId>omnifaces</artifactId>
<version>${omnifaces.version}</version>
<scope>compile</scope>
</dependency>
Como o Tomcat é um Servlet Container, ele não tem uma implementação do JSF. O que eu falei não vale pro Tomcat, você precisa colocar a implementação junto nesse caso.
Não sei se tem como você fazer um deploy separado da implementação do JSF, ou tem que coloca-la dentro do teu war
mesmo.
Isso daí é outra coisa. As vezes você declara várias dependências de bibliotecas de um mesmo “fabricante”.
Por exemplo, suponhamos que o GUJ tem um conjunto de bibliotecas para web services. Imagine que são 6 bibliotecas. No teu pom, você vai colocar a dependência para cada uma delas, juntamente com a versão. Como elas são desenvolvidas em conjunto, a versão delas sempre é igual. Estamos agora, por exemplo, na versão 1.1
. Você vai lá e declara todas as dependências, e coloca a versão 1.1
em cada uma delas. De um dia para o outro, sai uma versão 5.0
totalmente revolucionária e você quer atualizar o teu pom. Ao invés de ter que sair editando cada versão de cada dependência, você pode declarar variáveis (tipo <guj.version>5.0</guj.version>
) e só referenciar essa variável dentro das dependências. É pra isso que serve aquele ${variavel}
. Também serve para organizar melhor o pom.