Для чого <scope> під <dependency> у pom.xml?


179

Переглядаючи документацію http://maven.apache.org/surefire/maven-surefire-plugin/examples/testng.html , <scope>тег можна побачити під<dependency>

Що це таке, і як ми можемо використовувати його для запуску тесту?


15
це все дуже добре пояснено в документації: maven.apache.org/guides/introduction / ...
Гвідо

Відповіді:


266

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

Ця область використовується для обмеження транзитивності залежності, а також для впливу на класовий шлях, який використовується для різних завдань побудови.

складати

Це область за замовчуванням, яка використовується, якщо не вказана жодна. Залежності компіляції доступні на всіх класах проекту. Крім того, ці залежності поширюються на залежні проекти.

за умови

Це дуже схоже на компіляцію, але вказує на те, що ви очікуєте, що JDK або контейнер забезпечать залежність під час виконання. Наприклад, створюючи веб-додаток для Java Enterprise Edition, ви б встановили залежність від API сервлетів та відповідних API API EE Java в тому обсязі, який надається, оскільки веб-контейнер забезпечує ці класи. Ця область доступна лише для компіляції та тестування, і не є перехідною.

час виконання

Ця область вказує на те, що залежність не потрібна для компіляції, а є для виконання. Це у клас виконання та тестових класів, але не компіляція.

тест

Ця область вказує на те, що залежність не потрібна для звичайного використання програми та доступна лише для етапів складання та виконання тестів.

система

Цей обсяг схожий із передбаченим, за винятком того, що ви повинні надати JAR, який містить його явно. Артефакт завжди доступний і не шукається у сховищі.

імпорт (доступний лише в Maven 2.0.9 або новіших версіях)

Ця область використовується лише залежно від типу пом у розділі. Це вказує, що вказаний POM повинен бути замінений залежностями в цьому розділі POM. Оскільки вони замінені, залежності зі сферою імпорту фактично не беруть участь у обмеженні транзитивності залежності.

Щоб відповісти на другу частину вашого питання:

Як ми можемо використовувати його для запуску тесту?

Зауважимо, що testобласть дозволяє використовувати залежності лише для фази тестування.

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


Отже, якщо ви використовуєте "тест", чи закінчується він у створеному файлі .jar?
markthegrea

1
що робити, якщо залежність потрібна під час компіляції та виконання?
Альбін


12

Шість областей залежності:

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


4

Тег діапазону завжди використовується для обмеження перехідних залежностей та доступності jar на рівні шляху до класу. Якщо ми не надаємо будь-якої області, тоді область за замовчуванням буде працювати, тобто компілювати .


11
Компілювати означає, що вам потрібен JAR для компіляції та запуску програми. Як веб-додаток, наприклад, JAR буде розміщений у каталозі WEB-INF / lib. За умови, що вам потрібен JAR для компіляції, але під час виконання вже існує JAR, що надається оточуючим середовищем, тому вам не потрібно його пакувати разом із додатком. Для веб-програми це означає, що файл JAR не буде розміщений у каталозі WEB-INF / lib. Для веб-додатків, якщо сервер додатків вже надає JAR (або його функціональність), тоді використовуйте "надано", в іншому випадку використовуйте "компілювати".
Мукеш

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

0

Якщо ми не надаємо жодної сфери, тоді область за замовчуванням компілюється. Якщо ви хочете підтвердити, просто перейдіть на вкладку «Ефективна пом» у редакторі затемнення, вона покаже вам як компіляцію.


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