Для чего нужен <scope> в разделе <dependency> в pom.xml?


179

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

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


15
все это очень хорошо объяснено в документах: maven.apache.org/guides/introduction/…
guido

Ответы:


266

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

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

компиляции

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

при условии

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

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

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

тест

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

система

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

импорт (доступен только в Maven 2.0.9 или более поздней версии)

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

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

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

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

Прочитайте документацию для получения полной информации.


Так что, если вы используете «test», он заканчивается в .jar создан?
markthegrea

1
Что делать, если зависимость требуется во время компиляции и выполнения?
Альбин


12

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

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


4

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


11
Компиляция означает, что вам нужен JAR для компиляции и запуска приложения. Например, для веб-приложения JAR будет помещен в каталог WEB-INF / lib. Предоставленный означает, что вам нужен JAR для компиляции, но во время выполнения уже существует JAR, предоставленный средой, поэтому вам не нужно, чтобы он был включен в ваше приложение. Для веб-приложения это означает, что файл JAR не будет помещен в каталог WEB-INF / lib. Для веб-приложения, если сервер приложений уже предоставляет JAR (или его функциональные возможности), тогда используйте «предоставленный», в противном случае используйте «compile».
Мукеш

1
пожалуйста, добавьте свой комментарий в свой ответ
Supun Wijerathne

0

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


OP спрашивает , что сфера является и делает , не найдя того, что сфера применения по умолчанию.
Wouter
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.