2009-07-23 10 views
2

Есть ли способ заставить Maven использовать удаленные артефакты, а не те, которые установлены на вашем компьютере? так как я беспокоюсь о ошибках во время выполнения, а не о компиляции. Ошибка сборки сервера недопустима.Как построить без использования локально установленных артефактов

P.S. Я знаю, что могу удалить или переименовать папку .m2, но я уверен, что есть еще более умный способ сделать это. Может быть, какой-то плагин или специальный параметр param?

ответ

7

Отсутствие локального репозитория означало бы ваш путь к классу, состоящий почти полностью из URL-адресов на удаленных серверах. Я не понимаю, почему это будет поддерживаться, поскольку выполнение будет ужасным, и любое отброшенное соединение приведет к проблемам с загрузчиками классов. Наличие локального репозитория гарантирует, что банки доступны до начала компиляции/выполнения.

Также считайте, что проекты WAR и EAR (и многие из них используют плагин зависимостей) полагаются на загрузку баннеров для завершения их упаковки. Было бы огромные накладные расходы, если бы они были извлечены из удаленного репозитория на каждой сборке. Я почти уверен, что руководители центральных районов не будут увлекаться этой нагрузкой.

Некоторые альтернативы для вас рассмотреть следующие вопросы:

  • Если вы хотите, чтобы заставить чистый локальный репозиторий на каждой сборки, вы можете использовать purge цель плагина зависимостей.
  • Если вы хотите сохранить изолированные сборки, вы можете использовать отдельные настройки Maven, передав -Dorg.apache.maven.global-settings =/path/to/global/settings.xml
  • Альтернативно вы можете переопределить локальный репозиторий в расчете на билда основе путем пропускания -Dmaven.repo.local =/некоторые/репо/путь
  • Если вы хотите, чтобы избежать поражения удаленных хранилищ на каждой сборки, добавьте <updatePolicy> никогда </updatePolicy > для удаленных конфигураций хранилищ. Это означает, что Maven будет проверять наличие обновлений только в том случае, если вы вынудите его с помощью переключателя «-U» в командной строке
  • Если вы хотите использовать последнюю версию зависимости, вы можете использовать ключевое слово LATEST в объявлении версии (вместо номера версии), хотя это может быть рискованным, если зависимость несовместима.
  • Если вы хотите использовать текущую версию зависимости от версии, вы можете использовать ключевое слово RELEASE в объявлении версии (вместо номера версии). Это похоже на ПОСЛЕДНИЕ, но, как правило, это новейшая стабильная сборка, а не новейшая.
  • Если вы хотите использовать последнюю версию зависимостей в пределах диапазона, используйте нотацию диапазона версии Maven, например [1.0.0.2.0.0], означает любую версию от 1.0.0 включительно до версии 2.0.0

Для получения более подробной информации о ПОСЛЕДНИЕ И РЕЛИЗЫ см. section 9.3.1.3 of the Maven book.

Если вы используете внутренний менеджер хранилища (обязательная Nexus и Artifactory референции здесь), накладные расходы продувки локального хранилища значительно снижаетесь - вы только имеет повышенную локальную нагрузку сетевого трафика.

+0

Я надеялся найти какой-нибудь плагин, который проверяет, есть ли у меня последняя версия lib, и если я вручную установил что-то, чем игнорировать и использовать последние из репо. – IAdapter

+0

В этом случае взгляните на этот вопрос, чтобы сообщить Maven о том, как всегда использовать последнюю версию: http://stackoverflow.com/questions/30571/how-do-i-tell-maven-to-use-the -latest-version-of-a-dependency –

+0

@ 01, я добавил еще три варианта, диапазоны версий, версии LATEST или RELEASE могут быть такими, какие вы после –

0

Я не думаю, что есть действительно способ сделать то, о чем вы просите. Вы можете заглянуть в зависимости от выпусков SNAPSHOT (но это означает, что ваша версия версии восходящих проектов будет версией SNAPSHOT).

Кстати, об этом подробно говорилось в недавнем Java Posse episode (#268).Я не думаю, что у них получилось решение, но у вас могут быть хорошие идеи.

Мне также нравятся некоторые из Rich Seller's ideas, которые я буду смотреть в себя.