Maven без (удаленного) хранилища? - PullRequest
3 голосов
/ 28 февраля 2011

У меня есть многомодульный проект Maven 2, и я хочу убедиться, что все взято из моего локального извлеченного источника.

  • Можно ли сказать Maven никогда не загружать что-либо для модулей, источником которых он является? Нужно ли отключать удаленные репозитории?
  • Всегда ли Maven должен идти дорогостоящим способом установки модуля в локальный репозиторий, а затем извлекать его снова для каждого из его зависимых?
  • Может ли Maven автоматически сначала перекомпилировать зависимости для модуля, если их локальный источник изменился, а затем скомпилировать зависимость?

Ответы [ 2 ]

10 голосов
/ 28 февраля 2011

Можно ли сказать Maven никогда не загружать ничего для модулей, источником которых он является?

Нет. Maven 2 только «видит» текущий модуль во время его сборки. С положительной стороны, вы можете построить часть дерева, запустив Maven в модуле.

Нужно ли отключать удаленные репозитории?

Да, используйте опцию «offline» -o или -offline. Или используйте settings.xml с прокси, у которого нет файлов. Это не то, что вы хотите.

Всегда ли Maven должен идти дорогостоящим путем установки модуля в локальный репозиторий, а затем извлекать его снова для каждого из его зависимых?

Да, но это не дорого. Во время сборки файл копируется (это было дорого десять лет назад). Когда используется зависимость, Maven просто добавляет путь к файлу в процесс Java. Таким образом, файл не копируется и не изменяется снова. Maven предполагает, что файлы в локальном хранилище не изменяются (или изменяются только один раз, когда происходит загрузка / установка).

Maven автоматически сначала перекомпилирует зависимости для модуля, если их локальный источник изменился?

Нет. Были планы на Maven 3, но я не могу найти вариант, чтобы включить что-то подобное.

Чтобы решить ваши проблемы, вы должны установить локальный прокси (например, Nexus ).

7 голосов
/ 28 февраля 2011
  1. Maven загружает материалы (зависимости), только если они недоступны в вашем локальном хранилище ($USER_HOME/.m2/repository). Если вы не хотите, чтобы что-либо загружалось, используйте автономный режим. Это можно сделать с помощью переключателя -o. Э.Г.

    mvn -o clean install
    
  2. В этом нет ничего дорогого. Если вы создаете родительский проект complete , он соберет все модули, а затем скопирует артефакты в локальный репозиторий. Затем, когда вы создаете проект, который имеет зависимости от этого проекта, Maven просто скопирует их из локального хранилища на вашем жестком диске в пакет, который будет создан для текущего проекта.

  3. Нет . Я был сожжен. Maven не компилирует зависимости автоматически. Существует плагин под названием Плагин Maven Reactor . Этот плагин позволяет создавать зависимости проекта до его создания.

...