Освобождение от разработки в производство в maven

Я запутался в использовании maven в средах разработки и производства - я уверен, что это что-то простое, что мне не хватает. Благодарен за любую помощь..

Я установил maven внутри eclipse на своем локальном компьютере и написал некоторое программное обеспечение. Мне очень нравится, как это делало такие вещи, как включение зависимых банок очень легко.

Так что моя среда разработки. Но теперь я хочу выпустить проект на производство на удаленном сервере. Я искал документацию, но я не могу понять, как она должна работать или что наилучшая практика maven. Вы должны:

a) Также нужно запускать maven в рабочей среде и загружать все ваши файлы в производственную среду и восстанавливать там свой проект? (Что-то во мне бьющееся по идее перестроить "выпущенный" код на производственном сервере, поэтому я уверен, что это не так.)

b) использовать mvn: package для создания вашего файла jar и затем скопировать его до производства? (Но тогда, что из всех этих хороших зависимостей? Разве нет опасности, что ваш протестированный код теперь будет работать против разных версий зависимых банок в рабочей среде, возможно, нарушив ваш код? Или пропустить банку...? )

c) Что-то еще, что я не понимаю.

Заранее благодарим за помощь!

Ответ 1

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

  • Вы должны упаковать свой код в формате (WAR, EAR, другой вид пакета), который может быть развернут в рабочей среде для выполнения. Такие пакеты обычно включают зависимости. Чтобы создать более сложные пакеты, Maven Assembly Plugin может помочь.

  • Созданные Maven артефакты (JAR, WARs и т.д.) должны быть совместно через удаленный репозиторий (и, таким образом, развернуты - я имею в виду mvn deploy здесь - в этот удаленный репозиторий). Удаленный репозиторий может быть простой файловой системой, обслуживаемой через веб-сервер или более сложным решением, например Nexus.

  • Разработка обычно выполняется с использованием зависимостей SNAPSHOT (например, 1.0-SNAPSHOT). Во время выпуска вы должны изменить версию на "фиксированную" версию (например, 1.0) и некоторые другие биты из вашего pom.xml, запустите сборку, чтобы проверить, что все в порядке, зафиксировать измененный pom.xml, создать тег в VCS, продвигайте версии на новый SNAPSHOT (например, 1.1-SNAPSHOT) в pom.xml, зафиксируйте новый pom.xml в VCS. Весь процесс требует некоторой работы, но это можно автоматизировать с помощью Maven Release Plugin.

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

Конечно, есть вариации вокруг этого (развертывание на производство - это большая часть времени для конкретной компании), но общая идея есть.

Ответ 3

При создании артефакта вы обычно указываете, какую область видимости имеет зависимость. В области по умолчанию он должен быть упакован в ваш архив. Если вы этого не хотите, используйте область "предоставлено" - в этом случае вам нужно подготовить среду выполнения, обеспечивающую зависимость. Это порождает плохую идею перестроить пакет только для развертывания.

Что касается развертывания, вы можете использовать плагин maven antrun для копирования файлов локально или через scp.