Maven исключение зависимостей для файла War, но включение для тестов - PullRequest
2 голосов
/ 25 сентября 2008

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

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

<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: Кажется, я плохо сформулировал этот вопрос. Приведенное ниже решение Ларса идеально подходит для одного исключения (как показывает пример), однако в моем реальном сценарии у меня есть несколько исключений, и добавление дополнительных зависимостей для каждого кажется вонючим. Решение, которое кажется работающим, состоит в том, чтобы установить область показанной зависимости на compile , а затем создать вторую зависимость того же артефакта (mygroup.myartifact) без исключений, а область действия установить на test . Поскольку Ларс оба правильно ответили на мой плохо сформулированный вопрос, а также привели меня в направлении фактического решения, я отмечу его ответ как ответ.

1 Ответ

7 голосов
/ 25 сентября 2008

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

<scope>test</scope>

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

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

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

...