Использование maven $ {basedir} в многомодульной установке - PullRequest
38 голосов
/ 19 мая 2011

Я использую локальный репозиторий, как описано в Maven: добавить зависимость в jar по относительному пути .

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

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

Есть идеи, почему это так?

Ответы [ 3 ]

24 голосов
/ 19 мая 2011

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

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

(Существует также очень подробное решение: Свойство Maven2, указывающее родительский каталог )

3 голосов
/ 11 сентября 2014

Как насчет нескольких репо?

<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>
2 голосов
/ 20 мая 2011

Я уже задавал аналогичный вопрос, касающийся каталога родительского проекта.

Вы можете увидеть поток здесь: Свойство Maven2, которое указывает родительский каталог

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