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