#maven
#maven
Вопрос:
Я пытаюсь преобразовать проект из ant в maven.
Модульные тесты зависят от стороннего двоичного jar, который недоступен ни в одном общедоступном репозитории maven.
Как мне заставить maven справиться с этой ситуацией? Я нашел два решения, ни одно из которых не является приемлемым. Во-первых, использовать системную зависимость; это не работает, потому что а) зависимость должна быть только для тестов, и б) зависимость не найдена eclipse после создания проекта eclipse.
Во-вторых, вручную установить зависимость в локальном репозитории. Кажется, это рекомендуемый способ. Я не хочу этого делать, потому что я хочу, чтобы пользователи могли создавать и тестировать с помощью простого «mvn test». Если пользователям приходится читать документ и копировать / вставлять некоторые команды оболочки, чтобы иметь возможность создавать и тестировать, значит, что-то не так.
Я полагаю, было бы нормально, если бы maven сам установил зависимость в локальный репозиторий как часть сборки — возможно ли это, и если да, то как?
Ошибка.
Ответ №1:
Возможно, вы захотите взглянуть на install:install-file. Вы можете заставить его выполняться на ранней стадии вашего проекта ( validate
или initialize
) с помощью стандартных средств.
С другой стороны, если это не удастся из-за отсутствия зависимости в том же проекте, есть еще пара вариантов. Один из них — вызвать ant script через antrun
плагин для установки артефакта.
Или создайте дополнительный модуль, не зависящий от вашего артефакта, который будет выполнен до основного модуля, и попросите этот модуль установить артефакт, как описано ранее.
Комментарии:
1. Спасибо Алексу. Я не вижу способа проверить, находится ли jar уже в локальном репозитории, прежде чем добавлять его, поэтому я устанавливаю его при каждой сборке. Однако, похоже, все работает нормально. Вот соответствующий раздел из pom.xml:
Ответ №2:
Прежде всего, мой способ — использовать менеджер репозитория, такой как nexus, и установить эту зависимость туда.
Однако есть другое решение. Вы можете включить этот сторонний jar в свой проект, а с помощью тестового плагина вы можете настроить включение его в classpath таким образом:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.10</version>
<configuration>
<additionalClasspathElements>
<additionalClasspathElement>path/to/additional/resources</additionalClasspathElement>
<additionalClasspathElement>path/to/additional/jar</additionalClasspathElement>
</additionalClasspathElements>
</configuration>
</plugin>
Кстати, я надеюсь, что вы знаете о том, что maven выполняет плагин surefire для запуска тестов по жизненному циклу по умолчанию.
Комментарии:
1. Спасибо Sessizlik, я не уверен, как здесь помогает nexus, я не хочу поддерживать репозиторий для доступа ко всему миру. Однако верная конфигурация classpath выглядит как раз так, как мне нужно. Ошибка.
2. Nexus очень прост в настройке, и вы, вероятно, в конечном итоге его настроите. Кроме того, таким образом вы можете избежать проверки jars в своем репозитории исходного кода.
3. @artbristol — Я пытаюсь сделать свой проект доступным для создания случайными людьми в Интернете. Как nexus помогает мне это сделать?
4. @Aled, ну, у вас должен быть хостинг для исходного кода вашего проекта. В зависимости от политики хостинга может быть достаточно просто добавить репозиторий Nexus только для чтения для двоичных артефактов.