Чжан Сан недавно сделал проект, но для этого проекта требуется более 30 упаковок банок. Он может скачивать только по одному из интернета, а после скачивания приходится вручную по одному импортировать.
В конце концов я его доделал, но оказалось, что некоторые версии jar-пакетов несовместимы, и потребовался день, чтобы все исправить. Действительно "тофу, смешанный с ферментированным соевым творогом - все больше и больше запутывается!"
После более чем месяца безумной сверхурочной работы проект был наконец завершен.После того, как Чжан Сан развернул тестовую среду, он передал ее тестировщику Ли Си.
Чжан Сан подумал, что наконец-то смог хорошо ловить рыбу.Кто бы знал, что Ли Си работал очень серьезно, и через некоторое время была обнаружена куча ошибок.
Чжан Сан может только сразу изменить ошибку, а затем ему приходится компилировать и упаковывать проект вручную. В лучшем случае я собирал вещи более дюжины раз в день, но Чжан Сан был измотан.
Так как же избежать описанного выше сценария? Мейвен здесь.
1. Введение в Maven
Maven является частью Apache Software Foundation.Инструменты автоматизированной сборки, ориентированный на платформу Javaсборка проектаа такжеуправление зависимостями.
Проще говоря, Maven — полезный инструмент. Раньше нам нужно было найти пакет jar в Интернете, когда мы делали проекты.После использования Maven нам нужно только настроить координаты зависимостей, и он автоматически загрузит пакет jar в определенный каталог на жестком диске нашего компьютера. .
Помимо управления пакетами jar, он также может помочь нам сделать многое:
- 1. Автоматически загружать необходимые пакеты jar, управлять версиями пакетов jar и зависимостями между ними.
- 2. Помогите скомпилировать программу
- 3. Помогите упаковать программу
- 4. Помогите развернуть программу
- 5. Помочь вам управлять взаимосвязью каждого модуля в проекте.
Глоссарий:
полагаться:Например, нашему проекту нужен servlet.jar, этот jar-пакет можно назвать зависимостью, или проект зависит от servlet.jar. Когда мы импортируем a.jar, мы обнаруживаем, что нам также нужно импортировать b.jar, указывая на то, что a.jar зависит от b.jar.
Сборка проекта:Построение проекта описывает серию компиляции кода, операции, упаковки, развертывания и т. д.обработать.
- 1. Очистка проекта. Очистите ранее скомпилированный код.
- 2. Компиляция: скомпилируйте исходный код программы в код, исполняемый виртуальной машиной, то есть в файл класса. maven может помочь нам в пакетной компиляции кода.
- 3. Тест: maven может выполнить код тестовой программы, чтобы убедиться, что ваша функция верна.
- 4. Упаковка: поместите все файлы классов, файлы конфигурации и другие ресурсы в сжатый файл. Для программ Java сжатый файл имеет расширение xx.jar, а для веб-приложений — расширение сжатого файла xx.war.
- 5. Установка: Установите файл jar или файл war в локальный репозиторий.
- 6. Развертывание: разверните программу на сервере, и мы сможем получить к ней доступ через URL-адрес.
2. Установка и настройка Maven
2.1 Загрузите и установите
Примечание. Maven разработан на Java, поэтому сначала необходимо установить и настроить JDK.
Официальный сайт Мавена:
https://archive.apache.org/dist/maven/maven-3/
Разархивируйте загруженный сжатый пакет вНекитайский без пробеловв каталоге:
2.2 Настройка переменных среды
1. Добавьте переменные
Имя переменной: MAVEN_HOME
Значение переменной: путь установки maven
2. Изменить путь
Увеличьте значение переменной: %MAVEN_HOME%\bin
3. Подтвердить
Нажмите одновременно клавиши окна + R, введите cmd и нажмите Enter. Затем введите командную строку:mvn -v
4. Измените и настройте локальный склад
Зачем изменять локальный репозиторий?
Поскольку локальный склад Maven по умолчанию находится в папке C/user/.m2, по мере загрузки все большего количества пакетов jar системный диск будет становиться все более и более заполненным, а компьютер будет все больше и больше зависать, поэтому рекомендуется находиться за пределами диска C. Создайте локальный репозиторий.
Откройте основной файл конфигурации Maven settings.xml.
Добавьте следующие теги:
<localRepository>你的repository目录</localRepository>
Например:
<localRepository>D:\CodeSoftware\Maven\repository</localRepository>
5. Настройте адрес загрузки образа Alibaba Cloud.
Поскольку скорость загрузки пакетов jar с зарубежных удаленных складов низкая, скорость загрузки внутри Alibaba Cloud высокая.
В файле settings.xml добавить:
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>;
<mirrorOf>central</mirrorOf>
</mirror>
полная настройка.xml
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<localRepository>D:\CodeSoftware\maven\repository</localRepository>
<mirrors>
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
</settings>
3. Использование Maven в IDEA
3.1 Настройка Maven в IDEA
Файл -> Настройки:
3.2 Создание проекта JAVA
File -> New -> Project
3.3 Создание веб-проекта
File -> New -> Project
Здесь нам нужно использовать шаблон веб-проекта, который поставляется с Maven.
Поскольку каталог проекта, созданный с использованием шаблона веб-проекта, поставляемого с Maven, является неполным, вам необходимо создать каталоги java и resources в основном каталоге.
3.4 Использование инструментов Maven
Когда мы настроим инструмент Maven в IDEA, кнопка Maven появится в правой части окна IDEA:
Роль значка окна Maven:
4. Основные концепции Maven
4.1 Структура каталогов
Структура каталогов, указанная в maven:
- 1.sms: имя проекта, которое также является корневым путем проекта.
- 2.src: Исходный код проекта
- 3.main: основная программа
- 4.java: исходный код проекта
- 5.rsources: файл конфигурации основной программы
- 6.тест: тестовый код
- 7.rsources: файлы конфигурации для тестового кода
- 8.pom.xml: файл конфигурации проекта Maven.
4.2 pom-файл
Полное имя pom: Project Object Model, то есть объектная модель проекта.
Maven абстрагирует структуру и содержимое проекта в модель, которая объявляется и описывается в файле pom.xml. Итак, pom.xml — это ядро Maven.
Полный файл pom.xml:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>spring-boot-parent</artifactId>
<groupId>org.springframework.boot</groupId>
<version>2.2.5.RELEASE</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>com.xxl</groupId>
<artifactId>sms</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
</properties>
<modules>
<module></module>
</modules>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.27</version>
</dependency>
</dependencies>
<build>
<plugins>
</plugins>
</build>
</project>
- 1.modelVersion: версия модели Maven, настроенная по умолчанию.
- 2.groupId: идентификатор компании или организации, обычно обратный доменному имени компании, например com.alibaba. Или наоборот доменное имя компании + имя проекта, например com.alibaba.taotao.
- 3.artifactId:название проекта.
- 4.version: номер версии проекта, обычно определяемый трехзначным числом, например 2.2.5. Если проект все еще находится в разработке, в версию обычно добавляется SNAPSHOT. Если проект очень стабилен и уже выпущен, RELEASE обычно добавляется после версии.
- 5.parent: конфигурация pom, используемая для объявления родительского проекта для наследования.
- 6.packaging: Тип упаковки проекта, по умолчанию jar. Обычно Java-программы упаковываются в jar-файлы, а веб-программы — в wars.
- 7.properties: Используется для определения некоторых конфигураций в проекте, таких как формат кодирования и т. д.
- 8.dependencies: В проекте Maven необходимые нам пакеты jar называются зависимостями. Мы настраиваем зависимости в теге dependencies, а конфигурация зависимостей представлена координатами. Координаты представляют собой комбинацию идентификатора группы, идентификатора артефакта и версии.
- 9.modules: в многомодульной разработке Maven установите связь между этим модулем и другими модулями.
- 10.build:build в основном содержит конфигурацию, связанную со сборкой проекта, например, установку jdk-версии скомпилированного плагина.
4.3 Зависимости
В проекте MavenПакеты jar, которые нам нужны, называются зависимостями.. Настраиваем его в теге dependenciesзависимые координатыПосле этого Maven будет автоматически искать его на локальном складе по координатам зависимостей, и после нахождения он будет автоматически импортирован в наш проект.
Если он не найден, Maven скачает jar-пакет из центрального репозитория в локальный репозиторий по координатам зависимостей.
Зависимости должны быть записаны в теге зависимости, который содержит идентификатор группы, идентификатор артефакта и версию. Например:
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.27</version>
</dependency>
</dependencies>
На самом деле, мы можем использовать координаты зависимостей в качестве идентификатора пакета jar.Вы настраиваете координаты зависимостей в pom.xml, и Maven сначала перейдет в локальный каталог репозитория, чтобы найти пакет jar в соответствии с этим идентификатором. в центральный репозиторий, чтобы загрузить пакет jar в папку репозитория на вашем компьютере, а затем импортировать его в проект.
4.4 Объем зависимостей
Когда мы настраиваем зависимости, на самом деле есть еще одинЗависимая область действия:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.27</version>
<scope>compile</scope>
</dependency>
Область зависимости: компилировать, тестировать, при условии, по умолчанию — компилировать.
Например, областью зависимости junit является тест, который участвует только в тестировании. Предоставляется область зависимостей сервлета, и она не участвует в упаковке и развертывании, поскольку сервер tomcat уже содержит пакет jar сервлета.
4.5 Координаты
Maven управляет любым пакетом jar как проектом на складе, представленным координатами, состоящими из трех векторов. Координаты могут представлять уникальные проекты Maven в репозитории.
Координаты представляют собой комбинацию идентификатора группы, идентификатора артефакта и версии. Идентификатор группы, идентификатор артефакта и версия определяют путь проекта в репозитории, а идентификатор артефакта и версия определяют имя пакета jar.
4.6 Склад
Настраиваем координаты зависимости (jar-пакета) в файле pom.xml, и Maven может автоматически загрузить jar-пакет в проект.Откуда он взял jar-пакет? Репозиторий Maven.
Мы все знаем, что склады используются для хранения вещей, так что же склад Maven используется для хранения? банка Мешок.
По расположению складского хранения делим склад Maven наместный склада такжеудаленный склад.
Местный склад:Пакет jar хранится в папке на вашем компьютере.Maven по умолчанию помещает пакет jar в каталог .m2\repository на диске C.
Удаленный репозиторий:Удаленные склады подразделяются на центральные склады, зеркальные копии центральных складов и частные серверы.
центральный складСодержит все распространенные пакеты jar, все программисты могут получить пакеты jar из центрального репозитория онлайн. Центральный репозиторий является удаленным репозиторием по умолчанию для maven и является наиболее авторитетным.
Адрес официального сайта центрального склада:
https://mvnrepository.com/
Все необходимые нам зависимости можно найти выше:
Зеркало центрального репозитория:На каждом континенте, таком как Азия и Европа, есть несколько серверов для распределения трафика для центрального склада. Облегчить давление доступа к центральному складу. Пользователи на континенте сначала получат доступ к зеркальному серверу на этом континенте. Образ репозитория Alibaba Cloud Maven, который мы настроили выше, принадлежит образу центрального репозитория.
Частный сервер:Для серверов, развернутых в среде локальной сети, в компаниях обычно используются частные серверы.
4.7 Жизненный цикл Maven
Жизненный цикл Maven: это процесс создания проекта Maven, очистки, компиляции, тестирования, составления отчетов, упаковки, установки и развертывания.
5. Общие настройки Maven
5.1 Определение глобальных переменных
Мы можем определить глобальные переменные в свойствах, а затем использовать ${имя переменной} для унифицированной настройки зависимых координат. Например:
<properties>
<mysql.version>8.0.27</mysql.version>
</properties>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
</dependencies>
5.2 Укажите расположение ресурса
Все java-файлы в каталоге src будут скомпилированы на этапах компиляции и тестирования соответственно, но другие файлы в этих двух каталогах будут игнорироваться.Если вам нужно использовать другие файлы в каталоге src как часть упакованного пакета jar, Необходимо указать местоположение файла ресурсов.
Нам нужно указать расположение этого ресурса в теге сборки:
<build>
<resources>
<resource>
<directory>src/main/java</directory><!--所在的目录-->
<includes><!--目录下的.properties,.xml 文件都会扫描到-->
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
</build>
6. Maven управляет многомодульными приложениями
Иногда мы делим проект на несколько модулей, например, общий модуль в основном содержит некоторые классы инструментов, постоянную информацию и т. д., сервисный модуль в основном используется для бизнес-процессов, а веб-модуль в основном является контроллером.
Maven может легко помочь нам поддерживать отношения между различными модулями.
6.1 Создайте многомодульный проект с помощью Maven
Создать смс родительского проекта Maven
File -> new -> Module -> Maven
Удалите каталог src родительского проекта и измените метод упаковки файла pom на pom.
Создать подпроект sms-web
File -> new -> Module -> Maven
Создать подпроект sms-сервиса
File -> new -> Module -> Maven
Создать подпроект смс-дао
File -> new -> Module -> Maven
Создать sms-модель подпроекта
File -> new -> Module -> Maven
Создать подпроект sms-common
File -> new -> Module -> Maven
POM-файл родительского проекта:
6.2 Знакомство с зависимостями
1. Зависимости между модулями:
Все мы знаем, что зависимости транзитивны.Например, модуль B вводит модуль A, а модуль C представляет модуль B, что эквивалентно модулю C, импортирующему модуль A.
В проекте мы знаем, что сервис зависит от дао, а контроллер зависит от сервиса. Dao, сервис и контроллер зависят от класса сущности модели, и как dao, так и сервис должны использовать common. Но мы не можем добавить модельные зависимости ко всем трем из них и общие зависимости как к дао, так и к сервису.
В соответствии с транзитивностью зависимостей мы можем добавить зависимости модели к общему модулю, общие зависимости к дао, зависимости дао к сервису и сервисные зависимости к контроллеру.
pom.xml для смс-общего:
pom.xml для смс-дао:
pom.xml для смс-сервиса:
pom.xml для смс-сети:
Затем используйте инструмент Maven для его упаковки и установки, и каждый модуль сможет вызывать друг друга.
2. Сторонние зависимости:
Обычно мы используем тег dependencyManagement в файле pom.xml родительского проекта для управления версией зависимостей. Если эта зависимость используется в подмодуле, ее нужно указать только в теге dependencies.
Из приведенной выше картинки мы знаем, что тег dependencyManagement на самом деле не относится к зависимости, он просто указывает версию зависимости, которая нам удобна для унифицированного управления ею.
Если модулю sms-web необходимо использовать зависимость commons-io, нам нужно только добавить координаты зависимости в зависимость зависимостей его файла pom.xml.
Поскольку версия зависимости указывается тегом свойств в родительском модуле, нет необходимости добавлять номер версии в подмодуль, что удобно для унифицированного управления.