Изучая Maven, этого учебника из 10 000 слов действительно достаточно!

Spring
Изучая Maven, этого учебника из 10 000 слов действительно достаточно!

1 Введение в Maven

1.1 Зачем использовать Maven

Благодаря богатой экосистеме Java, независимо от того, какой функции вы хотите достичь, вы можете найти соответствующие классы инструментов Эти классы инструментов представлены в виде пакетов jar, таких как Spring, SpringMVC, MyBatis, драйверы баз данных и т. д. все они в виде пакетов jar, между пакетами jar будут ассоциации.Перед использованием зависимости необходимо определить другие зависимости, от которых зависит эта зависимость.Поэтому, когда проект относительно большой, управление зависимостями станет очень хлопотный и раздутый , что является первой проблемой, которую решает Maven.

Maven также может обрабатывать многомодульные проекты. Для простых проектов можно выполнять одномодульные субподряды.Если проект более сложный, он должен быть многомодульным.Например, проект электронной коммерции имеет модуль заказа, модуль членства, модуль товара, платежный модуль... В общем, подробнее Для модульного проекта каждый модуль не может работать независимо. Проект может быть запущен только после объединения нескольких модулей. В настоящее время с помощью инструмента Maven упаковка в один клик проект может быть реализован.

До Maven мы в основном использовали инструмент построения проекта Ant.У Ant есть фича, что его приходится писать каждый раз, а он пишется почти каждый раз, и конфигурация раздута. Итак, позже придумали Maven. Является ли Maven самым передовым инструментом сборки версии? Нет, просто Maven в настоящее время больше используется в области Java. Помимо Maven, есть еще Gradle.

1.2 Что такое Мавен

Maven — это инструмент управления проектами, он содержит объектную модель проекта (Project Object Model), отраженную в конфигурации, представляет собой файл pom.xml. Это набор стандартов, жизненный цикл проекта, система управления зависимостями, а также включает в себя плагины и цели, определенные на этапе жизненного цикла проекта.

Когда мы используем Maven, мы используем пользовательскую объектную модель проекта, pom.xml, для подробного описания наших собственных проектов.

В Maven есть два ядра:

  • Управление зависимостями: унифицированное управление jar-файлами (Maven предоставляет центральный репозиторий Maven,mvnrepository.com/, когда мы закончим добавлять в проект...Он автоматически отправится на центральный склад для загрузки соответствующих зависимостей и решения проблемы зависимости зависимостей)
  • Создание проекта: компилировать, тестировать, упаковывать, развертывать, загружать на частные серверы и т. д.

2. Установка Мавена

  • Maven — это проект Java, поэтому сначала необходимо установить JDK.

Скачать Мавен:

  • Скачать Maven

ссылка для скачивания:maven.apache.org/download.success...

  • Распаковать и настроить

Для настройки вам нужно только настроить переменные среды:

Сначала настройте MAVEN_HOME:

Затем настройте переменные среды:

  • Проверить установку

Если вы используете IntelliJ IDEA, вы можете напрямую использовать подключаемый модуль Maven, поставляемый с IDEA, без загрузки Maven. Плагин Maven, поставляемый с IntelliJ IDEA, находится в\ideaIU-2019.2.4.win\plugins\maven\lib\maven3

3. Конфигурация Maven

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

3.1 Тип склада

тип склада инструкция
местный склад Это склад на вашем компьютере. У каждого есть склад на компьютере. Расположение по умолчанию:当前用户名\.m2\repository
Собственный склад серверов По большому счету, это приватный сервер Maven, построенный внутри компании, он находится в локальной сети и имеет высокую скорость доступа, а jar, хранящийся на этом складе, — это, как правило, jar, разработанный самой компанией.
центральный склад Он поддерживается командой Apache и содержит большинство jar-файлов. Драйвер базы данных Oracle не был включен в первые дни. С августа 2019 года драйвер Oracle включен.

Теперь есть 3 склада, так как же найти пакет jar?

3.2 Конфигурация локального склада

Расположение локального репозитория по умолчанию:当前用户名\.m2\repositoryЭто местоположение можно настроить, но не рекомендуется настраивать этот адрес по нескольким причинам:

  1. Хотя все локальные jar-файлы помещаются в этот репозиторий, они не занимают много места.
  2. Расположение по умолчанию относительно скрыто, и его нелегко найти.

Технически, конечно, можно настроить расположение локального склада.Настройте расположение локального склада в conf/settings.xml:

3.3 Конфигурация удаленного зеркалирования

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

<mirror>
        <id>nexus-aliyun</id>
        <mirrorOf>central</mirrorOf>
        <name>Nexus aliyun</name>
        <url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>

Эта конфигурация добавляется в узел зеркал в settings.xml:

4. Общие команды Maven

В Maven есть несколько общих команд.Если вы используете Eclipse, вам нужно вводить команды вручную.Если вы используете IDEA, вы можете просто щелкнуть без команд.

Общие команды Китайское значение инструкция
mvn clean очистить Эту команду можно использовать для очистки скомпилированных файлов.
mvn compile компилировать Скомпилируйте код Java в файл класса
mvn test контрольная работа испытание проекта
mvn package Бэйл В соответствии с конфигурацией пользователя проект упаковывается в пакет jar или военный пакет.
mvn install Установить Вручную установите банку в локальный репозиторий
mvn deploy загрузить Загрузить банку на частный сервер

Здесь важно отметить, что ни одна из этих команд не запускается независимо, у них есть порядок. Возьмем простой пример:

Я хочу загрузить банку на частный сервер, затем, чтобы собрать банку, вам нужно выполнить команду package, упаковать и, конечно же, протестировать, затем вам нужно использовать команду mvn test, В конце концов все команды будут выполнены однажды. Однако разработчики также могут вручную настроить, чтобы не выполнять определенную команду, которая пропускает. В целом, кроме тестирования, другие этапы пропускать не рекомендуется.

Конечно, если разработчик использует IDEA, эти команды не нужно набирать вручную, достаточно нажать:

4.1 Сборка проекта по команде

Вы можете создать проект Maven непосредственно с помощью команд, но в реальной разработке вы обычно можете использовать Eclipse или IDEA для непосредственного создания проекта Maven.

Создать команду:

mvn archetype:generate -DgroupId=org.javaboy -DartifactId=firstapp -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

Если вы видите следующее приглашение, это означает, что проект был успешно создан:

После успешного создания проекта остается два файла:

Объясните, что для любого проекта важнее всего эти два.

В pom.xml определены все конфигурации проекта.

4.2 Упаковка проекта

Затем мы можем использовать команду mvn package, чтобы упаковать вновь созданный проект в пакет jar.

Перед упаковкой необходимо настроить версию JDK не ниже 7. Поэтому нам также необходимо вручную изменить файл pom.xml, то есть добавить следующую конфигурацию:

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

4.3 Установите проект в локальный репозиторий

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

После установки в локальный репозиторий в это время щелкните свой собственный локальный репозиторий, и вы увидите связанные банки.

5. Использование Maven в IDEA

В отличие от Eclipse, после установки IDEA вы можете напрямую использовать Maven.

5.1 Конфигурация, связанная с Maven

В IDEA Maven настроен вFile->Settings->Build,Execution,Deployment->Build Tools->Maven:

5.2 Создание проекта JavaSE

Сначала при создании проекта выберите проект Maven:

Если вы отметите «Создать из архетипа», это означает, что вы можете создать новый проект на основе скелета проекта (шаблона проекта), но если вы просто создаете проект JavaSE, вам не нужно выбирать скелет проекта. Просто нажмите «Далее». Затем заполните координаты проекта, а именно groupId и ArtiftId.

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

5.3 Создание проекта JavaWeb

В IDEA существует два способа создания веб-проекта Maven:

  • Сначала создайте проект JavaSE, затем вручную преобразуйте проект JavaSE в проект JavaWeb.
  • При создании проекта выберите скелет проекта, а скелет выбирает веб-приложение.

Из двух методов рекомендуется первый.

5.3.1 Модернизация проекта JavaSE

Таким образом, сначала создайте проект JavaSE, и шаги создания будут такими же, как описано выше.

После того, как проект создан,Сначала измените pom.xml и настройте формат упаковки проекта как военный пакет.Таким образом, IDEA знает, что текущий проект является веб-проектом:

Затем выберите проект JavaSE, щелкните правой кнопкой мыши, выберите «Открыть настройки модуля» или нажмите F4 напрямую, а затем выберите «Веб», как показано ниже:

Затем в каталоге webapp добавьте файл web.xml.

Обратите внимание: обязательно измените расположение файла web.xml:

После завершения настройки нажмите OK, чтобы выйти.

После создания проекта следующим шагом будет его развертывание.

Чтобы развернуть, сначала нажмите «Изменить конфигурации» в правом верхнем углу IDEA:

Затем настройте Tomcat:

Затем выберите вкладку Deployment и настройте проект для публикации:

Наконец, щелкните треугольник в правом верхнем углу IDEA, чтобы начать проект.

5.3.2 Прямое создание через скелет веб-приложения

Этот способ относительно прост и в основном не требует дополнительной настройки.После того как проект создан, он является веб-проектом. Просто выберите скелет веб-приложения при создании проекта.

После выбора скелета следующие шаги аналогичны предыдущим.

После успешного создания проекта остается только каталог webapp. В это время вручную создайте каталоги java и resources. После завершения создания щелкните правой кнопкой мыши, выберите «Отметить каталог как», отметьте каталог java как корневой каталог источников и пометить каталог ресурсов как корень ресурсов. .

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

6. Управление зависимостями Maven

Проекты Maven, если вам нужно использовать сторонние элементы управления, выполняются с помощью управления зависимостями. Здесь используется файл pom.xml. Эта концепция называется объектной моделью проекта (POM, Project Object Model). Мы определяем форму проекта Maven в pom.xml. Следовательно, pom.xml эквивалентен карта проекта Maven. . Так же, как файл web.xml используется для описания трех основных веб-компонентов.

Что входит в эту карту?

6.1 Координаты Maven

<dependencies>
  <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.11</version>
    <scope>test</scope>
  </dependency>
</dependencies>
  • dependencies

На вкладке зависимостей добавьте координаты maven, соответствующие банкам, необходимым для проекта.

  • dependency

Тег зависимости представляет собой координату

  • groupId

Уникальный идентификатор группы, компании, организации и т.д. По соглашению идентификатор сообщества начинается с обратного имени домена организации, создавшей проект (например, org.javaboy). Координата Maven должна содержать groupId. Некоторыми типичными идентификаторами групп, такими как groupId apache, являются org.apache.

  • artifactId

ArtifactId эквивалентен уникальному идентификатору элемента в организации.

  • version

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

  • scope

Представляет область зависимости.

Мы добавили много зависимостей, но сфера использования разных зависимостей разная. Есть два наиболее типичных из них: один основан на базе данных, а другой — на модульном тестировании.

Драйвер базы данных, в процессе использования мы пишем свой собственный код, который является кодом JDBC, только когда проект запущен, нам нужно выполнить код в драйвере MySQL. Поэтому после того, как драйвер MySQL будет добавлен в проект, его область действия может быть установлена ​​на время выполнения, и он не будет действовать при компиляции.

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

6.2 Конфликты зависимостей

  • Причины конфликтов зависимостей

На рисунке a.jar зависит от b.jar, а a.jar зависит от d.jar, в это время связь между a и b и d является прямой зависимой связью, а связь между a и c — зависимой связью. отношения косвенной зависимости.

6.2.1 Разрешение конфликтов

  1. сначала определите первое использование
  2. Принцип ближайшего пути (использование прямого объявления)

Взяв в качестве примера spring-context, x на следующем рисунке представляет неудачную зависимость (сначала используется зависимость с низким приоритетом, то есть зависимость с ближайшим путем):

Вышеуказанные два являются поведением по умолчанию.

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

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>5.1.9.RELEASE</version>
    <exclusions>
        <exclusion>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
        </exclusion>
    </exclusions>
</dependency>

Это означает исключение зависимости spring-core из контекста spring.

7. Частный сервер Maven

Управление репозиторием Maven также называется частным сервером Maven или прокси-репозиторием. Есть две цели использования частного сервера Maven:

  1. Приватный сервер — это прокси между разработчиками и удаленными репозиториями.
  2. Частные серверы можно использовать для развертывания собственных jar-файлов компании.

7.1 Введение в Nexus

Nexus — это мощный инструмент управления репозиторием Maven. С помощью Nexus вы можете легко управлять внутренними репозиториями, упрощая при этом доступ к внешним репозиториям. Официальный сайт:www.sonatype.com/

7.2 Установка

  • скачать

ссылка для скачивания:woohoo.так что type.com/download-OS…

  • распаковать

Скопируйте загруженный сжатый пакет в путь без китайского языка, а затем распакуйте его.

  • запускать

После распаковки откройте окно cmd (откройте окно cmd от имени администратора), затем найдите каталог распаковки nexus и выполните команду nexus.exe/run, чтобы запустить службу.

Этот запуск немного медленный, около минуты или двух

После успешного запуска браузер вводитhttp://lcoalhost:8081Откройте страницу администрирования.

Открыв страницу управления, нажмите кнопку входа в правом верхнем углу, чтобы войти в систему. Имя пользователя/пароль по умолчанию: admin/admin123. Конечно, пользователи также могут нажать кнопку «Настройки», чтобы вручную настроить других пользователей.

Щелкните Репозитории, чтобы просмотреть сведения о репозитории:

7.2.1 Тип склада

название инструкция
proxy Указывает, что это хранилище является прокси для удаленного хранилища, наиболее типичным из которых является прокси-сервер центрального хранилища Maven.
hosted Хост-репозиторий, некоторые jar-файлы, разработанные компанией, хранятся в хост-репозитории, а некоторые jar-файлы отсутствуют в центральном репозитории Maven.
group Группа репозиториев, включая репозитории прокси и хост-репозитории
virtual виртуальный склад

7.2.2 Загрузить банку

Загрузите банку и настройте два места:

  • Конфигурация файла Maven conf/settings.xml:
<server>
  <id>releases</id>
  <username>admin</username>
  <password>admin123</password>
</server>
<server>
  <id>snapshots</id>
  <username>admin</username>
  <password>admin123</password>
</server>

В файле pom.xml проекта, в который вы хотите загрузить банку, настройте путь загрузки:

<distributionManagement>
    <repository>
        <id>releases</id>
        <url>http://localhost:8081/repository/maven-releases/</url>
    </repository>
    <snapshotRepository>
        <id>snapshots</id>
        <url>http://localhost:8081/repository/maven-snapshots/</url>
    </snapshotRepository>
</distributionManagement>

После завершения настройки нажмите кнопку развертывания или выполните команду развертывания mvn, чтобы загрузить банку на частный сервер.

7.2.3 Загрузите банку на частный сервер

Добавляйте зависимости прямо в проект.После завершения добавления вы можете добавить дополнительные адреса приватных серверов:

<repositories>
    <repository>
        <id>local-repository</id>
        <url>http://localhost:8081/repository/maven-public/</url>
        <releases>
            <enabled>true</enabled>
        </releases>
        <snapshots>
            <enabled>true</enabled>
        </snapshots>
    </repository>
</repositories>

8. Агрегатная инженерия

Так называемый проект агрегации на самом деле является многомодульным проектом. В относительно большом интернет-проекте проект необходимо разделить на несколько модулей для разработки, таких как модуль заказа, модуль VIP, модуль оплаты, модуль управления контентом, CMS, CRM и так далее. Этот метод разделения на самом деле ближе к идее микросервисов. В модуле можно продолжить разбиение, например, на дао, сервис, контроллер и т.д.

Некоторые люди могут сказать, что этого субподряда недостаточно?

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

8.1 Многомодульное отображение проекта

|--javaboy-parent
      |-- javaboy-cms
      |-- javaboy-crm
      |-- javaboy-manger
           |-- javaboy-manager-model
           |-- javaboy-manager-dao
           |-- javaboy-manager-service
           |-- javaboy-manager-web

Взяв в качестве примера javaboy-manger, сам по себе javaboy-manager не предоставляет функций, он отвечает только за управление своими собственными подмодулями, и каждый из его подмодулей не может работать независимо, для запуска необходимо объединить четыре. Когда проект упакован, модель, дао и сервис будут упакованы в jar-файлы, а затем упакованные jar-файлы будут автоматически скопированы в сеть, а затем сеть будет автоматически упакована в военный пакет.

8.2 Создание сводного проекта в IDEA

1. Создайте пустой проект Maven:

После создания проекта, поскольку родитель не участвует в реализации бизнеса и используется только для управления его подмодулями, каталог src может его удалить.

2. Выберите текущий проект, щелкните правой кнопкой мыши, New->Module

А затем продолжать выбирать, чтобы создать проект Maven:

В IDEA родитель текущего модуля был указан по умолчанию, и разработчикам нужно только заполнить ArtiftId текущего модуля:

После создания javaboy-manager в это время просмотрите файл pom.xml javaboy-parent и обнаружите, что он автоматически добавляет атрибут упаковки:

Среди них его атрибут упаковки имеет значение pom, что означает, что это агрегированный проект, и в то же время он также имеет узел модулей, который указывает на его собственный подмодуль. При этом обратите внимание на javaboy-manager, который сам имеет родительский узел, описывающий значение атрибута его родительского модуля:

<parent>
    <artifactId>javaboy-parent</artifactId>
    <groupId>org.javaboy</groupId>
    <version>1.0-SNAPSHOT</version>
</parent>

Этот родитель является не просто описанием отношения родитель-потомок, он имеет отношение наследования.Как правило, мы можем единообразно определить номер версии зависимостей или плагинов в родительском элементе.

3. Поскольку javaboy-manager сам по себе является проектом-агрегатором, каталог src javaboy-manager также можно удалить.

4. Выберите javaboy-manager, щелкните правой кнопкой мыши New->Module, чтобы создать новый модуль Maven. Этот шаг аналогичен второму шагу и здесь повторяться не будет. Здесь, после успешного создания новой модели javaboy-manager, мы вручную настраиваем значение свойства упаковки в jar.

5. В соответствии с шагом 4 создайте javaboy-manager-service и javaboy-manager-dao соответственно. 6. Продолжайте создавать модуль javaboy-manager-web В отличие от других модулей, веб-модуль нужно упаковать в вар. Для создания веб-модуля см. [Статья 5]. 7. После создания веб-проекта улучшите отношения наследования между модулями.

javaboy-manager-web зависит от javaboy-manager-service служба javaboy-manager зависит от javaboy-manager-dao javaboy-manager-dao зависит от модели javaboy-manager

Обратите внимание, что зависимости по умолчанию транзитивны, то есть javaboy-manager-model зависит от javaboy-manager-dao, и к ним также можно получить доступ в javaboy-manager-service.

Зависимости после настройки следующие:

Далее вы можете написать код в разных модулях, а затем развернуть проект. Справочник по методу развертывания [пятая статья]

Есть один момент, на который следует обратить внимание: в многомодульном проекте при упаковке веб-проектов необходимо обратить внимание на следующие моменты:

  1. Не может быть упакован напрямую
  2. Если вы хотите упаковать, есть два способа:
  • Первый — вручную установить модель, дао и сервис на локальный склад один за другим.
  • Упаковано из проекта агрегации, то есть упаковано из родительского веба.

Обратите внимание на публичный аккаунт WeChat [Jiangnan A Little Rain], ответьте Maven, получите электронную версию этой статьи или посетитеmaven.javaboy.orgПроверьте эту электронную книгу.