2008-09-25 3 views
1

У меня есть файл POM maven для веб-службы. Для одной из зависимостей я должен указать несколько исключений для файлов jar, которые уже хранятся на более высоком уровне на сервере веб-приложений (доступны для всех веб-приложений, а не только для этого конкретного). Одним из примеров такого исключения является JAR, содержащий мой драйвер JDBC.Исключение зависимостей Maven для файла War, но включение для тестов

Пример (с вымышленными деталями):

<dependency> 
    <groupId>mygroup</groupId> 
    <artifactId>myartifact</artifactId> 
    <version>1.0.0</version> 
    <exclusions> 
     <!--The jdbc driver causes hot-deployment issues--> 
     <exclusion> 
      <groupId>db.drivers</groupId> 
      <artifactId>jdbc</artifactId> 
     </exclusion> 
    </exclusions> 
</dependency> 

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

Как настроить POM так, чтобы исключенные части были доступны для моих тестов, но не включаются в мой WAR-файл?

Обновление: Я не могу вносить изменения в POM для mygroup.myartifact, так как это зависит от многих других проектов, и это требование исключения является уникальным для моего проекта.

Обновление 2: Кажется, я плохо сформулировал этот вопрос. Решение Lars ниже идеально подходит для одного исключения (как показывает пример), однако в моем реальном сценарии у меня есть несколько исключений, и добавление дополнительных зависимостей для каждого кажется вонючим. Решение, которое, похоже, работает, заключается в том, чтобы установить область видимой зависимости в , компилировать, а затем создать вторую зависимость того же артефакта (mygroup.myartifact) без исключений, а область действия установлена ​​на test. Поскольку Ларс правильно ответил на мой плохо сформулированный вопрос, а также привел меня в направлении фактического решения, я отвечу на его ответ как ответ.

+0

Ах, не знал, что вы можете перегружать подобные зависимости. Тогда я тоже чему-то научился, хорошо. :) – 2008-09-25 12:01:24

ответ

6

Используйте тег «scope» внутри вашей зависимости.

<scope>test</scope> 

http://maven.apache.org/pom.html#Dependencies

редактировать: если я понимаю вашу конфигурацию правильно, сфера = тест, который нужно добавить, должна быть добавлена ​​в mygroup.myartifact П. Таким образом, вы можете проверить, что артефакт с jdbc jar включен, но всегда, когда другие POMS хотят включить mygroup.myartifact, они не получают jdbc, включенный в качестве транзитивной зависимости.

second edit: Хорошо, если вы не контролируете POM, который хотите включить, выполните исключение, как вы уже сделали, а затем добавьте jdbc в качестве новой зависимости, с scope = test.

+0

Не будет ли это охватывать всю зависимость, я просто говорю об исключениях здесь. Я исключаю только части зависимости, но это те части, которые мне нужны для тестирования. – Einar 2008-09-25 11:17:39

Смежные вопросы