Entendendo os escopos ao importar as dependências no Maven

Posted by : at

Category : maven   java


O Resumo

Maven é uma das ferramentas mais conhecidas e populares para build de aplicação Java, além dessa função, também é utilizado como gestor de dependências. Dentro dessa parte existe uma tag chamada scope em que é possível definir qual o escopo esta será utilizada. Existem 6 valores possíveis para essa parte compile, runtime, provided, system, test, and import. Caso não seja declarado nenhum tipo o valor default é compile. Vamos agora comentar o que significa cada tipo utiilizando com.

É importante lembrar que existem dois tipos de dependências no Maven:

  • Diretas: São as que foram incluídas diretamente no código e podem ser vistas explicitamente no pom.xml do projeto.
  • Transitivas: Importadas através das diretas declaradas no projeto.

Para verificar todas as dependencias transitivas ou diretas rode o comando mvn dependency:tree isso vai gerar um código do tipo

[INFO] +- org.jetbrains.kotlin:kotlin-stdlib-jdk8:jar:1.4.21:compile
[INFO] |  \- org.jetbrains.kotlin:kotlin-stdlib-jdk7:jar:1.4.21:compile

Nesse caso kotlin-stdlib-jdk8 veio de forma direta e kotlin-stdlib-jdk7 como transitiva ambas como compile. Dependendo do escopo declarado as dependências transitivas serão afetadas assim como o classpath da aplicação.

compile

Como já dito este é o default para a configuração caso não haja nenhuma declaração vai como este tipo, para todos os classpaths do projeto. Além disso são propagadas para os projetos dependentes.

runtime

Indica que a dependencia é necessária para execução, mas não para a compilação. Vão ser incluídos nos classpath de test e runtime.

provided

Quer dizer que vai ser incluída pela JDK ou container no runtime da aplicação. Esse tipo não é transitivo.

system

Similar ao provided, mas deve mostrar explicitamente onde está o JAR. Deve estar sempre disponível e não habilitado para lookup no repositório

test

Disponível apenas para classpath de test, geralmente para libs de teste como JUNIT.

import

Funciona para dependências do tipo pom dentro do <dependencyManagement> indica que a dependencia vai ser substituída por uma lista de dependências.

Nota final

Note que como cada configuração muda a importação no classpath isso pode afetar, mas a documentação do Maven mostra quais são os resultados finais para cada tipo.

Quer me acompanhar?

Aqui estão algumas das minhas redes sociais.

GitHub: luizleite-hotmart

Twitter: luizleite_

Twitch: coffee_and_code

Linkedin: luizleiteoliveira


About Luiz Leite
Luiz Leite

Oi Eu sou o Luiz, principal na Hotmart e tenho esse blog para contar o que eu aprendo diariamente.

Email : xp.luiz@gmail.com

Website : https://luizleiteoliveira.github.io

About Luiz Leite Oliveira

Hi, my name is Luiz Leite. This is the site where I share some things

Star -->
Useful Links