Как сказать Maven игнорировать зависимость, если ее не удалось разрешить? - PullRequest
11 голосов
/ 26 февраля 2011

У меня есть зависимость, которую я установил в локальном репозитории Maven и которая используется локально, но недоступна на сервере развертывания. Я использую эту зависимость, используя Class.forName(...), поэтому проблем не будет, если она пропущена по пути к классам на сервере развертывания.

Можно ли как-нибудь сказать Maven игнорировать зависимость, если она не может ее разрешить?

Мне не кажется, что <scope> или <optional> могут решить эту проблему, но возможно сделать это с помощью <profiles>, если есть какой-либо способ активировать / деактивировать профиль на основе доступности зависимостей.

Ответы [ 2 ]

5 голосов
/ 09 августа 2011

Краткий ответ: нет.

Длинный ответ: после объявления зависимости - либо в общей части, либо в активном профиле - она ​​должна быть разрешена при попытке Maven;в противном случае сборка завершится неудачей.

Если maven разрешит запрошенное поведение, воспроизводимость сборки сильно пострадает.

Если для вас не проблема неясности и невоспроизводимости, вот подсказка, каксделать это:

  • вызвать внешний муравей из вашего pom.xml, используя exec-maven-plugin или maven-antrun-plugin
  • в коде муравья, используйте артефакт: зависимости от задач Maven Ant
  • обернуть его в блок ant-contrib trycatch

В любом случае, я настоятельно не рекомендую включать такие вещи в mavenстроить.Часто бывает достаточно иметь отдельную функциональность, вызываемую через ant из командной строки.

0 голосов
/ 26 мая 2011

при условии, что отсутствующая зависимость важна только в локальной среде, вы можете использовать комбинацию профиля и активации через .m2 / settings.xml

Вы удаляете зависимость из общих зависимостей и перемещаете ее какссылаться на зависимость в профиле вашего pom.xml (профиль уровня проекта) и активировать профиль через ваш m2 / settings.xml.

Вы также можете полностью удалить зависимость из вашего pom.xml и переместить зависимость впрофиль, который находится в вашем .m2 / settings.xml (профиль уровня пользователя)

см. введение в профили раздел

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

Активация вышеуказанного профиля основана на наличии файла в .m2/repository/local/dependency/1.0.0-Snapshot/local.jar

<profiles>
  <profile>
    <activation>
      <file>
        <exists>/home/user/.m2/repository/local/dependency/1.0.0-Snapshot/local.jar</exists>
      </file>
    </activation>
    ...
  </profile>
</profiles>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...