Maven2: используйте $ {basedir} в пути jar - PullRequest
3 голосов
/ 23 ноября 2010

Я использую в своем проекте внешнюю фирму. Когда я жестко запрограммировал путь в файле pom.xml следующим образом, он отлично работает:

<dependency>
  <groupId>com.foo.bar</groupId>
  <artifactId>bar</artifactId>
  <version>5.2</version>
  <scope>system</scope>
  <type>jar</type>
  <systemPath>D:\workspace\myproj\external\companyname\lib\proprietary_api.jar</systemPath>
</dependency>

Однако, когда я пытаюсь использовать переменную $ {basedir}, maven не может найти jar:

<dependency>
  <groupId>com.foo.bar</groupId>
  <artifactId>bar</artifactId>
  <version>5.2</version>
  <scope>system</scope>
  <type>jar</type>
  <systemPath>${basedir}\external\companyname\lib\proprietary_api.jar</systemPath>
</dependency>

Пом находится в D: \ workspace \ myproj

Он также должен быть кросс-платформенным (dev для Windows, развертываться в Linux).

Спасибо!

Ответы [ 5 ]

5 голосов
/ 23 ноября 2010

Неправильно использовать системную область для ваших проприетарных файлов JAR.Вы должны развернуть или установить его в локальный / центральный репозиторий.

3 голосов
/ 01 августа 2013

Для обеспечения кросс-платформенной совместимости используйте $ {file.separator} вместо слешей .., чтобы автоматически конвертировать в указанный ОС формат

3 голосов
/ 23 ноября 2010

Я не уверен, что это поможет, но попробуйте использовать прямую (/) вместо обратной (\) косой черты. Также попробуйте запустить его с mvn -e и mvn -X (последний произведет лот строк отладки) - это может помочь вам точно определить проблему.

Вот пример:

использования ${basedir} так, как вы хотите.

Кстати, почему бы вам не mvn install:install-file зависимость вместо использования systemPath? См:

0 голосов
/ 04 декабря 2010

Чтобы это работало как в Windows, так и в Linux, вы должны начать использовать профили.Таким образом, конкретный профиль будет активирован в зависимости от ОС, а сборка станет переносимой.

В каждом профиле вы можете определить свойство с именем jarPath (просто пример) и ссылаться на это свойство в своей зависимости.

Профили Maven Введение

Загляните в тег ОС и тег конфигурации профиля.Убедитесь, что ваша сборка всегда переносима, и нужно выполнять меньше ручных операций .involved.

0 голосов
/ 04 декабря 2010
  1. Используйте косую черту в пути.

  2. Заполнитель $ {basedir} экстраполируется только один раз за запуск Maven. Если этот проект не является самым верхним проектом в иерархии вашего проекта, то $ {basedir} будет экстраполирован на местоположение самого верхнего проекта (т.е. проекта, с которого начался Maven), а не текущего проекта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...