Использование maven ${basedir} в многомодульной настройке
Я использую локальный репозиторий, как описано в Maven: добавьте зависимость к банке относительным путем.
URL-адрес репозитория определен в самом верхнем pom.xml
как
<url>file:${basedir}/../3rdParty/maven-repository</url>
Кроме того, верхний pom.xml
определяет 2 модуля
<modules>
<module>sub1</module>
<module>sub2</module>
</modules>
Проблема заключается в том, что если модуль (скажем, sub1
) определяет зависимость, которая должна быть загружена из репозитория, а maven вызывается из верхнего каталога, ${basedir}
не устанавливается в этот каталог, а sub1
, что приводит к неправильному URL-адресу репозитория.
Итак, скажем, проект с самым верхним pom.xml
находится в
/Development/myproject/pom.xml
И хранилище находится в
/Development/3rdParty/maven-repository
Затем URL-адрес репозитория должен быть установлен на
/Development/myproject/../3rdParty/maven-repository
но оказывается, что он установлен на
/Development/myproject/sub1/../3rdParty/maven-repository
который, конечно, не существует.
Любая идея, почему это так?
Ответы
Ответ 1
Хотя в вашем случае это раздражает, это хорошо известно и преднамеренно. Проект maven должен знать только о своем каталоге выполнения, независимо от того, в каком контексте он выполняется.
Я задал почти тот же вопрос: переменная Maven для корня процессора ранее, и единственный ответ, который имел смысл, был используйте ${user.dir}
, хотя он взломан и не работает, если вы создаете из каталога модуля.
(Существует также это очень многословное решение: свойство Maven2, указывающее родительский каталог)
Ответ 2
Я уже задал аналогичный вопрос относительно каталога родительского проекта.
Вы можете увидеть эту тему здесь: Свойство Maven2, которое указывает родительский каталог
Ответ 3
Как насчет нескольких репозиций?
<repositories>
<repository>
<id>ibm-jars-bundle-lv0</id>
<url>file://${basedir}/ibm-jars-bundle/repo</url>
</repository>
<repository>
<id>ibm-jars-bundle-lv1</id>
<url>file://${basedir}/../ibm-jars-bundle/repo</url>
</repository>
<repository>
<id>ibm-jars-bundle-lv2</id>
<url>file://${basedir}/../../ibm-jars-bundle/repo</url>
</repository>
</repositories>