Para que serve <scope> em <dependency> no pom.xml?

Respostas:

266

O <scope>elemento pode receber 6 valores: compilar , fornecer , tempo de execução , teste , sistema e importação .

Esse escopo é usado para limitar a transitividade de uma dependência e também para afetar o caminho de classe usado para várias tarefas de construção.

compilar

Este é o escopo padrão, usado se nenhum for especificado. Dependências de compilação estão disponíveis em todos os caminhos de classe de um projeto. Além disso, essas dependências são propagadas para projetos dependentes.

forneceu

Isso é muito parecido com a compilação, mas indica que você espera que o JDK ou um contêiner forneça a dependência no tempo de execução. Por exemplo, ao criar um aplicativo da Web para o Java Enterprise Edition, você configuraria a dependência da API do Servlet e das APIs Java EE relacionadas ao escopo fornecido, porque o contêiner da Web fornece essas classes. Esse escopo está disponível apenas no caminho de classe de compilação e teste e não é transitivo.

tempo de execução

Esse escopo indica que a dependência não é necessária para compilação, mas é para execução. Ele está nos caminhos de classe de tempo de execução e teste, mas não no caminho de classe de compilação.

teste

Esse escopo indica que a dependência não é necessária para o uso normal do aplicativo e está disponível apenas para as fases de compilação e execução de teste.

sistema

Esse escopo é semelhante ao fornecido, exceto que você deve fornecer o JAR que o contém explicitamente. O artefato está sempre disponível e não é procurado em um repositório.

importação (disponível apenas no Maven 2.0.9 ou posterior)

Esse escopo é usado apenas em uma dependência do tipo pom na seção Indica que o POM especificado deve ser substituído pelas dependências na seção do POM. Desde que são substituídos, as dependências com um escopo de importação não participam realmente da limitação da transitividade de uma dependência.

Para responder à segunda parte da sua pergunta:

Como podemos usá-lo para executar o teste?

Observe que o testescopo permite usar dependências apenas para a fase de teste.

Leia a documentação para obter detalhes completos.

Ortomala Lokni
fonte
Então, se você usar "test", ele acaba no .jar criado?
markthegrea
1
e se for necessária uma dependência no momento da compilação e do tempo de execução?
Albin
23

adicionou boas imagens com escopos de explicação

insira a descrição da imagem aqui

insira a descrição da imagem aqui

vaquar khan
fonte
12

Seis escopos de dependência:

  • compilar : escopo padrão, classpath está disponível tanto para src/mainesrc/test
  • teste : o caminho da classe está disponível parasrc/test
  • fornecido : como complie, mas fornecido pelo JDK ou um contêiner em tempo de execução
  • tempo de execução : não é necessário para compilação, apenas é necessário em tempo de execução
  • sistema : fornecido localmente forneça caminho de classe
  • import : só pode importar outros POMs para o <dependencyManagement/>, disponível apenas no Maven 2.0.9 ou posterior
Premraj
fonte
4

A tag Scope é sempre usada para limitar as dependências transitivas e a disponibilidade do jar no nível do caminho da classe. Se não fornecermos nenhum escopo, o escopo padrão funcionará, ou seja, Compilar .

Mukesh
fonte
11
Compilar significa que você precisa do JAR para compilar e executar o aplicativo. Para um aplicativo da web, como exemplo, o JAR será colocado no diretório WEB-INF / lib. Fornecido significa que você precisa do JAR para compilar, mas em tempo de execução já existe um JAR fornecido pelo ambiente para que você não precise dele empacotado com seu aplicativo. Para um aplicativo da web, isso significa que o arquivo JAR não será colocado no diretório WEB-INF / lib. Para um aplicativo Web, se o servidor de aplicativos já fornecer o JAR (ou sua funcionalidade), use "fornecido", caso contrário, use "compilar".
Mukesh
1
por favor, adicionar yhis comentário dentro de sua resposta
Supun Wijerathne
0

Se não fornecermos nenhum escopo, o escopo padrão será compilar. Se você deseja confirmar, basta ir para a guia pom eficaz no editor eclipse, ele mostrará como compilar.

Umanath
fonte
OP perguntou o que o alcance é e faz , não encontrar o que o escopo padrão é.
Wouter