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

Como funcionam as dependências no Quarkus?

Ao acessar o site https://code.quarkus.io vi que todas as dependências que podemos colocar no pom.xml tem um groupId e artifactId diferente das bibliotecas originais.

Exemplo com Hibernate Validator

<dependency>
  <groupId>io.quarkus</groupId>
  <artifactId>quarkus-hibernate-validator</artifactId>
</dependency>

O que isso implica no ciclo de vida desse software que será criado com essas dependências? Todas as versões estarão atreladas a versão do Quarkus? Há diferença de implementação entre elas?

3 respostas

Oi João, tudo bem?

Todas essas dependências vem do quarkus-universe-bom. Basicamente um BOM é um tipo especial de POM usado para controlar as versões das dependências de um projeto e fornecer um local central para definir e atualizar essas versões. O BOM do Quarkus fornece a flexibilidade de adicionar uma dependência ao nosso módulo sem nos preocupar com a versão da qual devemos depender.

Observe o pom.xml abaixo. Você encontrará a importação do BOM do Quarkus, permitindo que você omita a versão nas diferentes dependências do Quarkus.

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>io.quarkus</groupId>
            <artifactId>quarkus-bom</artifactId>
            <version>${quarkus.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

<build>
    <plugins>
        <plugin>
            <groupId>io.quarkus</groupId>
            <artifactId>quarkus-maven-plugin</artifactId>
            <version>${quarkus.version}</version>
            <executions>
                <execution>
                    <goals>
                        <goal>build</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

Entendi. Imagino que o Spring Boot tenha algo assim, mesmo que não explícito no pom.xml, certo?

Mas uma dúvida permanece: Como a dependência tem groupId e artifactId diferentes das dependências originais, como o Framework lida com esse de-para de versões?

Não sei se me fiz entender, mas dando um exemplo:

Digamos que o Hibernate Validator mais novo atual tenha essa versão:

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>6.1.6.Final</version>
</dependency>

O do Quarkus carrega a versão do BOM que você falou (para todos de mesmo groupId, certo?) para a seguinte versão:

<dependency>
  <groupId>io.quarkus</groupId>
  <artifactId>quarkus-hibernate-validator</artifactId>
</dependency>

Ou seja, a versão do Hibernate Validator do Quarkus tem a versão que está no BOM.

Mas ela representa que versão da original? Ou não seria correta essa associação?

solução!

https://github.com/quarkusio/quarkus/blob/master/bom/application/pom.xml

A última versão do quarkus-bom carrega a versão 6.1.6.Final do hibernate-validator:

<hibernate-validator.version>6.1.6.Final</hibernate-validator.version>
<dependency>
       <groupId>org.hibernate.validator</groupId>
        <artifactId>hibernate-validator</artifactId>
         <version>${hibernate-validator.version}</version>
</dependency>

O bom nada mais é que um pom.xml repleto de dependências. Cada versão do bom muda as dependências, podendo incluir novas libs, remover, mudar versão, etc...