Предисловие: Все проекты в настоящее время используют maven, но не было времени на организацию и изучение, есть время как раз в эти два дня, чтобы организовать это.

1. Зачем использовать такой инструмент сборки, как Maven [почему]

① Проект — это проект

Если проект очень большой, не рекомендуется использовать пакеты для разделения модулей. Лучше, чтобы каждый модуль соответстWowал проекту, чтобы облегчить разделение труда и сотрудничество. С помощью maven проект можно разделить на несколько проектов.

② Чтобы использовать пакет jar в проекте, вам необходимо «скопировать» и «вставить» в библиотеку проекта

Один и тот же пакет jar неоднократно появляется в разных проектах, вам необходимо выполнять повторяющиеся операции копирования и вставки. С помощью maven пакеты jar можно хранить на «складе», вне зависимости от того, в каком проекте они находятся, просто используйте ссылку.

③ Подготовьте упаковку jar или загрузите ее с официального сайта каждый раз, когда она вам понадобится

Skyrim ٠ Что Будет Если Рассказать Мавен о Краже Мороза в Квесте «Дал слово — держи»

С помощью maven мы можем загрузить пакет jar унифицированным и стандартизированным способом.

④ Риск несовместимой версии пакета jar

Когда разные проекты используют пакет jar, версия пакета jar каждого проекта может быть несовместимой, что приведет к невыполненной ошибке. С помощью maven все пакеты jar помещаются в «репозиторий», а все проекты используют пакет jar на складе.

⑤ Пакет jar, который зависит от других пакетов jar, необходимо вручную добавить в проект самостоятельно.

Компонент FileUpload -> компонент ввода-вывода, commons-fileupload-1.3.jar зависит от commons-io-2.0.1.jar

Это сильно тратит время на импорт пакетов и значительно увеличивает стоимость обучения. С помощью maven он автоматически импортирует зависимые пакеты jar.

2. Что такое maven 【что】

① maven — это автоматизированный инструмент сборки, обслуживающий платформу Java

Имя: Мы можем называть Мейвен или Майвен, но Мавен нет.

② Строительство

Определение сборки: весь процесс развертывания скомпилированных результатов динамического веб-проекта на сервере.

Компиляция: исходный файл Java [.java] -> компиляция-> Файл байт-кода Classz [.class]

Развертывание: окончательное развертывание в контейнере sevlet — это не динамический веб-проект, а скомпилированный файл.

③ Все аспекты строительства

  • Очистить: удалить старый файл байт-кода класса файла, полученный при предыдущей компиляции
  • Compile compile: скомпилировать исходную программу java в файл байт-кода класса
  • Тестовый тест: автоматический тест, автоматический вызов программы junit
  • Отчетный отчет: результаты выполнения тестовой программы
  • Пакет пакетов: пакет War для динамического веб-проекта, пакет jar для проекта Java
  • Установить установку: особая концепция Maven —— скопируйте упакованные файлы в указанное место на «складе»
  • Развертывание: скопируйте военный пакет, созданный динамическим веб-проектом, в контейнер сервлетов, чтобы запустить его.

Три, установите maven

① Настроена ли текущая система с переменными среды JAVA_HOME

Skyrim — СЛУЧАЙНЫЙ И УНИКАЛЬНЫЙ ДИАЛОГ ОТ МАВЕН ЧЕРНЫЙ ВЕРЕСК??? УВИДЕЛ ЕГО СПУСТЯ 6 ЛЕТ ИГРЫ…

② Загрузите maven, разархивируйте maven и поместите его на не-китайский путь без пробелов

③ Настроить переменные среды, связанные с maven

  • Добавьте M2_HOME в переменную среды, путь — это корневой каталог после декомпрессии maven
  • Добавьте каталог maven / bin к пути в переменной среды

④ Проверка: maven -v просмотреть версию maven

Смотрите информацию о версии, поздравляем, все в порядке.

В-четвертых, первый maven

① Создайте согласованную структуру каталогов(Проект maven должен быть создан в соответствии с согласованной структурой каталогов)

Корневой каталог: название проекта
| — src: исходный код
| — | — main: сохранить основную программу
| — | — | — java: файл исходного кода java
| — | — | — ресурс: сохранить файл конфигурации платформы
| — | — test: сохранить тестовую программу
| — pop.xml: основной файл конфигурации Maven

Давайте создадим его вручную в соответствии с приведенной выше структурой каталогов папок, без какой-либо среды IDE (руководство на самом деле является наиболее полезным для нас, чтобы понять maven)

Создайте новый файл Hello.java в каталоге src / main / java / com / hzg / maven со следующим содержимым

package com.hzg.maven; public class Hello < public String sayHello(String name)< return «Hello «+name+»!»; >>
4.0.0 com.hzg.maven Hello 0.0.1-SNAPSHOT Hello junit junit 4.0 test

② Часто используемые команды maven

  • mvn clean: очистить
  • mvn compile: скомпилировать основную программу
  • mvn test-compile: скомпилировать тестовую программу
  • mvn test: выполнить тест
  • mvn пакет: пакет
  • mvn install: установить

Чтобы выполнить команды maven, вы должны войти в каталог pom.xml для выполнения

После входа в каталог проекта pom.xml вы можете его выполнить.

1. Запустите mvn compile.

ОК, операция завершена, зависимый пакет, который вы настроили в pom.xml, был импортирован на склад, проблема приближается,Где по умолчанию находится склад?

Местоположение склада по умолчанию:c: Usrs [имя пользователя для входа в текущую систему] .m2 repository

После выполнения компиляции только что предыдущая папка изменилась

Мы обнаружили, что в проекте Hello есть дополнительная целевая папка. Содержимое папки:

Обнаружено, что основным хранилищем в целевом объекте является скомпилированный файл байт-кода.

2. Запустите mvn test-compile., Помимо классов, под целевой папкой есть папка test-classes

3. Запустите пакет mvn., В целевой папке есть еще один пакет jar

Читайте также:  Прохождение небесной гавани в Скайриме

4. Запустите mvn clean и убедитесь, что целевая папка удалена. Вернуться в папку, которую мы создали вручную перед компиляцией

Пятерка, склад и координаты

① pom.xml:Объектная модель проекта Объектная модель проекта. Это основной файл конфигурации maven, и здесь устанавливается вся конфигурация сборки.

② Координаты:Используйте следующие три вектора, чтобы однозначно найти проект maven на складе

③ Связь между координатами проекта maven и путем на складе:

Связь сопоставления между координатами maven и хранилищем: [groupId] [artifactId] [version] [artifactId] — [version] .jar

Перейдите на локальный склад и посмотрите этот каталог: org springframework spring-core 4.3.4.RELEASE spring-core-4.3.4.RELEASE.jar

Конечно, точно соответствует (адрес склада по умолчанию указан выше, не говорите, что не знаю где, ничего страшного, давайте поговорим о складе ниже)

④ Склад

1. Местный склад:Склад на текущем компе, путь уже сказал

2. Удаленный склад:

  • Частный сервер: устанавливается в локальной сети. Как правило, у компаний есть частные серверы. Частные серверы обычно создаются с использованием нексуса. Конкретный процесс строительства может запрашивать другую информацию
  • Центральный склад: настроен в Интернете, как пружинный каркас только что установлен на центральном складе

Шесть, зависимость

① Когда maven разрешает информацию о зависимости, он извлекает зависимый пакет jar из локального хранилища

  • Те, кого нет на местном складе, пойдут на центральный склад, чтобы найти координаты maven, чтобы получить пакет jar.После того, как jar будет получен, он будет загружен на местный склад.
  • Сбой компиляции, если зависимый пакет jar не может быть найден для центрального склада.

② Если вы полагаетесь на проект maven, разработанный вами или вашей командой, вам необходимо использовать команду install для импорта пакета jar зависимого проекта maven на локальный склад.

Пример: теперь я создаю второй проект maven HelloFriend, который использует метод sayHello (String name) класса в первом проекте Hello. Когда мы используем команду mvn compile для компиляции проекта HelloFriend, нам будет предложено, что пакет jar, который зависит от Hello, отсутствует. Как это сделать?

После выполнения mvn install в первом проекте maven вы можете снова взглянуть на локальный склад и найти пакет jar проекта Hello. Как только в локальном хранилище будет пакет jar зависимого проекта maven, при использовании команды mvn compile в проекте HelloFriend вы сможете успешно скомпилировать

③ Сфера зависимости

область действия — это область зависимости

1、compile,Значение по умолчанию применимо ко всем этапам (разработка, тестирование, развертывание и эксплуатация). Этот jar будет всегда сущестWowать на всех этапах.

2、provided,Он используется только на этапе разработки и тестирования, его цель — предотвратить конфликт контейнера сервлета с пакетом jar на вашем локальном складе. Например, servlet.jar.

3、runtime,Он используется только во время выполнения, например, драйвер JDBC, подходит для этапов выполнения и тестирования.

4、test,Он используется только во время тестирования и используется для компиляции и запуска тестового кода. Вместе с проектом не выйдет.

5、system,Как и в случае с предоставленным, вам необходимо явно указать jar-файл, содержащий зависимости, и Maven не будет искать его в репозитории.

Семь, жизненный цикл

Maven имеет три набора взаимно независимых жизненных циклов. Обратите внимание, что мы говорим о «трех наборах» и «независимых». Новичкам легко рассматривать жизненный цикл Maven в целом, но это не так. Три жизненных цикла:

① Clean Lifecycle выполняет некоторую очистку перед фактической сборкой.Чистый жизненный цикл состоит из трех этапов:

  • предварительная очистка выполняет некоторые работы, которые необходимо завершить перед очисткой
  • clean удаляет все файлы, созданные последней сборкой
  • пост-чистка выполняет некоторую работу, которую необходимо завершить сразу после чистки

② Основная часть построения жизненного цикла по умолчанию, компиляция, тестирование, упаковка, развертывание и т. Д.

  • validate
  • generate-sources
  • process-sources
  • generate-resources
  • process-resources Копирование и обработка файлов ресурсов в целевой каталог, готовые к упаковке
  • компилировать компилировать исходный код проекта
  • process-classes
  • generate-test-sources
  • process-test-sources
  • generate-test-resources
  • process-test-resources Копирование и обработка файлов ресурсов в целевой каталог теста
  • тест-компиляция исходный код теста компиляции
  • process-test-classes
  • test запускает тесты с использованием подходящей среды модульного тестирования. Эти тестовые коды не будут упакованы или развернуты
  • prepare-package
  • package Принять скомпилированный код и упаковать его в публикуемый формат, например JAR.
  • pre-integration-test
  • integration-test
  • post-integration-test
  • verify
  • install устанавливает пакет в локальный репозиторий, от которого зависят другие проекты.
  • deploy копирует окончательный пакет на удаленный склад, чтобы другие разработчики могли поделиться им с проектом

Затем мы выполняем команду mvn install в проекте Hello и смотрим, что произошло, через журнал?

Через журнал мы обнаружили, что на самом деле выполняется mvn install, которая уже выполнила компиляцию и тестирование.

подводить итоги:Независимо от того, какой этап жизненного цикла вы хотите выполнить, maven выполняется с начала этого жизненного цикла

Плагин:Для каждого этапа есть плагины, см. Те, что отмечены красным. Подключаемый модуль отвечает за выполнение соответствующих команд.

③ Жизненный цикл сайта создает отчеты по проектам, сайты и сайты релизов.

  • pre-site выполняет некоторые работы, которые необходимо завершить перед созданием документации сайта
  • site Создание документации по сайту проекта
  • post-site выполняет некоторые работы, которые необходимо завершить после создания документации сайта, и готовится к развертыванию
  • site-deploy развертывает сгенерированные документы сайта на конкретный сервер
Читайте также:  Скайрим как переводится название

Источник: russianblogs.com

Maven — зачем?

Это общая модель проектов. В ней описываются такие общие характеристики как имя, версия, авторы и их контактная информация, VCS проекта и вообще связанные с ним сетевые ресурсы, тип проекта (например библиотека или web-модуль, в оригинальной терминологии называется packaging, хотя влияет не только на тип получаемого артефакта), связи с другими проектами, используемые при сборке плагины и описания способа их задейстWowания. Мне кажутся особенно важными два компонента этой модели.

Связи с другими модулями

POM допускает три типа связей с другими модулями: зависимость, включение и наследование.

Зависимость, эта связь говорит, что для некоторых фаз жизненного цикла нашего модуля, требуются некоторые артефакты модулей-зависимостей (абстрактно получилось — аж самому страшно). Что конкретно и на какой фазе жизненного цикла требуется определяется так называемой областью действия зависимости. Maven понимает несколько предопределённых областей действия и позволяет добавлять свои. В качестве примера ограничусь одной областью действия: compile — она говорит, что бинарные сборки зависимости требуются на этапе компиляции, выполнения тестов и во время выполнения.

Включение — говорит, что связанный модуль является неотъемлемой частью нашего модуля. Для прохождения нашим модулем некоторой фазы жизненного цикла, входящий в него также должен пройти эту фазу. Классический пример enterprise-модуль, включающий в себя web-модуль, пакет с EJB и общую библиотеку. Очевидно, что его сборка требует сборки каждого из включаемых модулей.

Наследование. Такая связь подразумевает перенос на наследника части модели предка. Правила переноса несколько запутаны, но в основном действует принцип — значение параметра модели предка становится умолчанием для модели потомка. Пример из моей практики: был создан модуль, устанавливающий версию JDK для компиляции проектов, внутренние репозитарии для результатов, набор правил для поверки соответствия исходников стандарту кодирования, он должен был использоваться (а кое-где и действительно использовался 😉 ) как родитель для всех разрабатываемых в рамках проекта модулей.

Описание используемых при сборке плагинов

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

Этот элемент несколько чужд общей идеи POM — он несёт не декларативное описание модуля, а инструкции по его сборке конкретным инструментом.

Итоги
  1. POM — эта общая, унифицированая модель описания программных модулей.
  2. Она поддерживает хранение не только аттрибутов отдельных модулей но и высокоуровневых связей между ними.
  3. Также она несёт информацию об инструментах, необходимых для поддержки жизненного цикла модуля.

Репозитории артефактов

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

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

  1. Структурированное хранение артефактов, их каталогизация.
  2. Повторное использование артефактов.

Утилита управления жизненным циклом

Название получилось достаточно пафосное, однако оно вполне соответствует высокой миссии и сложности предмета.

Прежде чем погрузиться в её функции, необходимо немного познакомится с теорией организации жизненного цикла модуля в Maven. Жизненным циклом называется вся совокупность операций над модулем от инициализации сборки до развёртывания. В процессе прохождения жизненного цикла выполняются определённые операции над модулем, формируются некоторые артефакты.

Жизненный цикл разделён на фазы. Каждая фаза подразумевает перевод модуля в новое состояние в результате её прохождения и появление новых артефактов. Каждая предыдущая фаза подготовливает основу для последующей. Список фаз является по сути частью POM, но глобальной, общей для всех модулей. Поный список приводить бессмысленно, но для примера приведу несколько фаз (достаточно интуитивно названных, на мой взгляд 🙂 ) в порядке их следования: compile,… test,… deploy.

В рамках каждой фазы выполняется некоторый набор целей в зависимости от модели конкретного модуля. Цель является конкретной операцией над исходными кодами и/или артефактами.

  1. Во-первых из совсем маленького ядра, в котором описаны (захардкожены, как говорит простой народ) базовые принципы устройства проектов, цели по умолчанию для фаз стандартных типов проектов, рабочая среда для плагинов (интерфейсы доступа к моделям, репозитариям, ФС, настройкам и т.п.).
  2. Во-вторых из плагинов. Они собственно содержат код, выполняющий цели. Практически вся внешняя функциональность mvn реализуется ими. Именно они генерируют, компилируют, тестируют, пакуют и т.д. и т.п.

Также можно попросить выполнить отдельную задачу конкретного плагина. Например есть плагин для генерации Eclipse-проектов, задача «сгенерировать проект» которого по умолчанию не привязывается ни к одной фазе, а вызывается заинтересованными лицами вручную.

Ещё одной крайне интересной функцией mvn является создание заготовки проекта на основе архетипа. Архетип — обобщённый шаблон проекта, традиционно концентрирующийся на его структуре и используемых плагинах. Например есть стандартные архетипы java-библиотеки, web-модуля, и нестандартные, например grails приложение. Важно понимать отличие архетипа от типа проекта.

Читайте также:  Как расшифровать дневник галла в Скайриме

Архетип — только шаблон начальной структуры и отдельных частей проекта, после создания проекта никакой информации о его архетипе не остаётся. Тип проекта — наоборот, часть модели, которая используется на протяжении всего жизненного цикла.

Что получается в сумме

Итак, мы выделили три столпа Maven. Что-же они дают нам вместе?

  • Концентрирование информации о модуле в одном месте и в одном формате. Не всё тут гладко, но многие IDE могут импортировать проекты из POM, большинство серверов автокомпиляции (continuous integration, как говорят адепты XP) также могут использовать их добавлении проекта.
  • Единая система идентификации модулей. Очень просто и очень важно. У нас нет теперь обозначений типа багфикс-ветка нашего-супер-проекта, собранная в 23 часа в прошлую субботу.
  • Один инструмент. Хотя это, прямо скажем, не уникальная фича Maven. Не удержусь и повторю прописную истину: проект должен собираться стандартными и переносимыми средствами. Сборка любимой IDE Первого Разработчика Проекта — путь в ад.
  • Автоматическое управление зависимостями. Связывание исходного кода проекта с бинарными сборками чего-то, очень невесёлая практика. Особо надо отметить трудности с поддержкой репозитариев исходников (сколько магнитных лент занимает бэкап вашего svn?)) ). Изобретения велосипеда в виде своих репозитариев или скриптов подтаскивающих исходнки зависимостей тоже не лучшее решение в эпоху, когда космические корабли бороздят просторы вселенной.
  • Повторное использование решений, связанных с устройством и процедурой сборки проектов. Благодаря наследованию и включению проектов мы можем многократно использовать однажды разработанные модели проектов, настройки, связанные с инфраструктурой и инструментарием принятыми в нашей компании. Использование архетипов позволяет автоматизировать этап создания новых проектов, съэкономить время на подготовке структуры проекта и минимизировать ошибки в использовании внешних моделей.
  • Готовое средство для управления результатами работы и простота их последующего использования. Настраиваем инфраструктуру подобающим образом и каждый билд оседает в нужном месте и доступен для последующего использования. Нужно проверить работоспособность разных компоновок версий/веток модулей большого проекта? Просто правим зависимости в POM.

Заключение

Что-то я местами отклонился от центрального вопроса и вплотную занялся вопросом «как», ну да ладно…

Из всей информации, приведённой выше, можно сделать простой, но почему-то весьма редкий вывод. Maven — не утилита для сборки Java-приложений. Maven — фреймворк для автоматизации большого спектра задач при поддержке проекта. Он никак не связан с языком и платформой, более того он совершенно не обязан что-либо собирать. Вы с помощью описания моделей или написания плагинов превращаете его в тот или иной инструмент. Да, принятая в нём по модель по умолчанию — сборка Java-модулей, но это лишь умолчания…

Надеюсь, что после прочтения топика каждый может уверенно ответить на вопросы, приведённые в начале 😉

P.S. Ещё я с интересом узнаю о вашем опыте нестандартного применения Maven. Есть идея в будующем создать пост с примерами интересных и необычных use case’ов для него.

Источник: habr.com

Кто такой мавен в скайриме

Мы создали классический «Hello, world», разберём его в деталях. Первое, во что мы упираемся, – это archetype , так в Maven называются шаблоны. Команда archetype:generate создает проект по архетипу. В нашем случае id по умолчанию приравнивается к 15 или maven-archetype-quickstart .

Чтобы задать шаблон, просто добавьте в команду

-DarchetypeArtifactId=maven-archetype-quickstart

Полный список доступных шаблонов можно посмотреть на сайте или отдельно в консоли вбить mvn archetype:generate . Следом идет archetypeGroupId – что-то вроде пространства имён шаблонов. GroupId – обычно используется для указания производителя. Artifact – это название нашего проекта. Собственно, артефакты – это главная сущность в Maven, из них состоит всё.

На выходе получаем такую структуру:

test-app |— pom.xml `— src |— main | `— java | `— com | `— mycompany | `— app | `— App.java `— test `— java `— com `— mycompany `— app `— AppTest.java

В корне видим сгенерированный файл pom.xml, открываем его.

4.0.0 com.mycompany.app test-app 1.0-SNAPSHOT 1.7 1.7 junit junit 4.12 test

Большая часть этого файла сгенерирована и не нуждается в корректировке на стартовом этапе, кроме тега dependencies , именно здесь нужно будет объявлять зависимоcти, каждую в отдельном теге dependency . Сейчас там указана только библиотека для тестирования junit .

Важные тонкости

Напоследок хочу обратить внимание на несколько пунктов. По умолчанию Maven работает с java 1.6, чтобы это поправить, нужно внутри тега project добавить следующий код, заменив на соответствующий номер.

org.apache.maven.plugins maven-compiler-plugin 3.8.1

Поздравляю, проделанной работы достаточно, чтобы прописать команду сборки:

mvn package

Фреймврок автоматически пройдет цепочку из 6 этапов, и теперь остается только запустить:

java -cp target/test-app-1.0-SNAPSHOT.jar com.mycompany.app.App

Наслаждаемся результатом трудов! =)

Этого должно быть достаточно для базового понимания Maven. Если вы загорелись идеей освоить этот инструмент и использовать весь его функционал, стоит начать с детального изучения super POM, шаблонов и плагинов. Удачи вам в освоении новых рубежей 😉

Источник: proglib.io