Подтвердить что ты не робот

Использование 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

который, конечно, не существует.

Любая идея, почему это так?

4b9b3361

Ответ 1

Хотя в вашем случае это раздражает, это хорошо известно и преднамеренно. Проект maven должен знать только о своем каталоге выполнения, независимо от того, в каком контексте он выполняется.

Я задал почти тот же вопрос: переменная Maven для корня процессора ранее, и единственный ответ, который имел смысл, был используйте ${user.dir}, хотя он взломан и не работает, если вы создаете из каталога модуля.

(Существует также это очень многословное решение: свойство 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>