José Alarcón
José Alarcón16/10/2023 08:40
Compartilhe

Escopos de dependência MAVEN e tipos

  • #Java

Escopos de dependência MAVEN e tipos

Escopos de dependência podem ajudar a limitar a transitividade das dependências. Eles também modificam o caminho da classe para diferentes tarefas de construção. Maven tem seis escopos de dependência padrão.

E é importante entender que cada escopo —, exceto importar — tem um impacto nas dependências transitivas.

1. Compilar

Esse é o escopo padrão quando nenhum outro escopo é fornecido.

Dependências com esse escopo estão disponíveis no caminho de classe do projeto em todas as tarefas de compilação. Eles também são propagados para os projetos dependentes.

Mais importante, essas dependências também são transitivas

 

<dependency>

   <groupId>commons-lang</groupId>

   <artifactId>commons-lang</artifactId>

   <version>2.6</version>

</dependency>

2. Fornecido

Usamos esse escopo para marcar dependências que devem ser fornecidas em tempo de execução pelo JDK ou um contêiner.

Um bom caso de uso para esse escopo seria um aplicativo da Web implantado em algum contêiner, onde o contêiner já fornece algumas bibliotecas em si. Por exemplo, este poderia ser um servidor web que já fornece a API Servlet em tempo de execução.

Em nosso projeto, podemos definir essas dependências com o fornecido escopo:

<dependency>

   <groupId>jakarta.servlet</groupId>

   <artifactId>jakarta.servlet-api</artifactId>

   <version>6.0.0</version>

   <scope>provided</scope>

</dependency>

fornecido as dependências estão disponíveis apenas no tempo de compilação e no caminho de classe de teste do projeto. Essas dependências também não são transitivas.

3. Tempo de execução

As dependências com esse escopo são necessárias em tempo de execução. Mas nós precisamos deles para a compilação do código do projeto. Por causa disso, as dependências marcadas com o tempo de execução o escopo estará presente no classpath de tempo de execução e teste, mas eles estarão ausentes no classpath de compilação.

Um driver JDBC é um bom exemplo de dependências que devem usar o escopo de tempo de execução:

 

<dependency>

   <groupId>mysql</groupId>

   <artifactId>mysql-connector-java</artifactId>

   <version>8.0.28</version>

   <scope>runtime</scope>

</dependency>

4. Teste

Usamos esse escopo para indicar que a dependência é necessária no tempo de execução padrão do aplicativo, mas é usada apenas para fins de teste.

Teste as dependências são transitivas e estão presentes apenas para classpaths de teste e execução.

O caso de uso padrão para esse escopo é adicionar uma biblioteca de teste como JUnit ao nosso aplicativo:

 

<dependency>

   <groupId>junit</groupId>

   <artifactId>junit</artifactId>

   <version>4.12</version>

   <scope>test</scope>

</dependency>

 

5. Sistema

Sistema o escopo é muito semelhante ao fornecido escopo. A principal diferença é que sistema exige que apontemos diretamente para um frasco específico no sistema.

Vale a pena mencionar isso sistema o escopo está obsoleto.

O importante a lembrar é que construir o projeto com sistema as dependências de escopo podem falhar em máquinas diferentes se as dependências estiverem presentes ou estiverem localizadas em um local diferente daquele systemPath pontos para:

 

<dependency>

   <groupId>com.baeldung</groupId>

   <artifactId>custom-dependency</artifactId>

   <version>1.3.2</version>

   <scope>system</scope>

   <systemPath>${project.basedir}/libs/custom-dependency-1.3.2.jar</systemPath>

</dependency>

6. Importação

Itilits disponível apenas para o tipo de dependência pom.

importação indica que essa dependência deve ser substituída por todas as dependências efetivas declaradas em seu POM.

Aqui, abaixo projeto personalizado a dependência será substituída por todas as dependências declaradas em custom-projectirates pom.xml <dependencyManagement> seção.

 

<dependency>

   <groupId>com.baeldung</groupId>

   <artifactId>custom-project</artifactId>

   <version>1.3.2</version>

   <type>pom</type>

   <scope>import</scope>

</dependency>

Conclusão

Neste artigo rápido, nos concentramos nos escopos de dependência do Maven, seu propósito e os detalhes de como eles operam.

Compartilhe
Comentários (0)