Что такое <scope> в разделе <dependency> в pom.xml для?

Глядя на документацию http://maven.apache.org/surefire/maven-surefire-plugin/examples/testng.html, мы можем видеть тег <scope> под <dependency>

Что это такое и как мы можем использовать его для запуска теста?

Ответ 1

Элемент <scope> может принимать 6 значений: компиляция, предоставление, время выполнения, тестирование, система и импорт.

Эта область используется для ограничения транзитивности зависимостей, а также для изменения пути к классам, используемого для различных задач сборки.

компиляции

Это область по умолчанию, которая используется, если ни один не указан. Зависимости компиляции доступны во всех классах проекта. Кроме того, эти зависимости распространяются на зависимые проекты.

при условии,

Это похоже на компиляцию, но указывает, что вы ожидаете, что JDK или контейнер предоставят зависимость во время выполнения. Например, при создании веб-приложения для Java Enterprise Edition вы должны установить зависимость от API-интерфейса Servlet и связанных с ним API-интерфейсов Java EE для области видимости, поскольку веб-контейнер предоставляет эти классы. Эта область видимости доступна только в пути к компиляции и тестированию и не является транзитивной.

во время выполнения

В этой области указывается, что зависимость не требуется для компиляции, но предназначена для выполнения. Он находится в среде выполнения и тестирует пути к классам, но не компилирует путь к классам.

тест

В этой области указывается, что зависимость не требуется для нормального использования приложения и доступна только для фаз компиляции и выполнения тестов.

система

Эта область похожа на предоставленную, за исключением того, что вы должны предоставить JAR, который содержит это явно. Артефакт всегда доступен и не просматривается в репозитории.

import (доступно только в Maven 2.0.9 или новее)

Эта область используется только для зависимости типа pom в этом разделе. Он указывает, что указанный POM должен быть заменен зависимостями в этом разделе POM. Поскольку они заменяются, зависимости с областью импорта фактически не участвуют в ограничении транзитивности зависимости.

Чтобы ответить на вторую часть вашего вопроса:

Как мы можем использовать его для запуска теста?

Обратите внимание, что область test позволяет использовать зависимости только для фазы тестирования.

Подробнее читайте документацию.

Ответ 2

добавлены хорошие изображения с областями объяснения

enter image description here

enter image description here

Ответ 3

Шесть областей зависимостей:

  • скомпилировать: область по умолчанию, путь к классам доступен как для src/main, так и для src/test
  • тест: путь к классам доступен для src/test
  • предоставляется: как complie, но предоставляется JDK или контейнером во время выполнения
  • время выполнения: не требуется для компиляции, требуется только во время выполнения
  • система: предоставляется локально, укажите путь к классу
  • import: можно импортировать только другие POM в <dependencyManagement/>, доступно только в Maven 2.0.9 или новее

Ответ 4

Тег области видимости всегда используется для ограничения транзитивных зависимостей и доступности баночки на уровне пути класса. Если мы не предоставим какой-либо области, тогда будет использоваться область по умолчанию, т.е. Компилировать.

Ответ 5

Если мы не предоставим какой-либо области, то область по умолчанию будет скомпилирована. Если вы хотите подтвердить, просто перейдите на вкладку "Эффективная вкладка pom" в редакторе eclipse, она покажет вам как компиляцию.