Наконец, артефакт Maven для построения проекта ясен~

Java задняя часть maven
Наконец, артефакт Maven для построения проекта ясен~

"Это седьмой день моего участия в ноябрьском испытании обновлений, ознакомьтесь с подробностями события:Вызов последнего обновления 2021 г."

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

PS: Чтобы иметь возможность помочь большему количеству энтузиастов Java, «Дорога продвинутых программистов Java» открыла GitHub (уже включен Benpian). В этой колонке уже собрано 675 звезд, если вам нравится эта колонка, что есть помощь, вы можете перейти к точке звезды, что также облегчит в будущем более систематическое изучение:

GitHub.com/IT Ван Эр/до…

Я очень рад видеть увеличение количества звезд с каждым днем.Я надеюсь, что все больше и больше энтузиастов Java смогут извлечь пользу из этого проекта с открытым исходным кодом.Звезда все большего количества людей также будет вдохновлять меня продолжать обновлять~

Подводя итог преимуществам Maven, можно выделить три основных момента:

  • управление зависимостями: Maven может помочь нам решить проблему управления зависимостями пакетов, больше не нужно отправлять большое количество пакетов jar и внедрять сторонние библиотеки;
  • Каноническая структура каталогов: Стандартная структура каталогов Maven помогает стандартизировать создание проекта.При настройке профилей можно читать разные файлы конфигурации в соответствии с различными средами (среда разработки, тестовая среда, производственная среда);
  • простая интеграция: Может быть интегрирован в IDE для более удобного использования.

1. Установите Мавен

Поскольку JDK является обязательным условием для установки Maven, используйтеjava -versionУбедитесь, что JDK установлен:

Я использую macOS, его можно установить двумя способами,Один — загрузить с официального сайта и установить вручную, другой — напрямую использовать brew для установки одним щелчком мыши..

Давайте сначала представимЗагрузка с официального сайта, ручная установка, этот метод также применим к системе Windows, разница может относиться к руководству по установке официального веб-сайта Maven:

maven.apache.org/install.htm…

1)Загрузка с официального сайта, ручная установка

Первый шаг, перейдите на официальный сайт, чтобы загрузить установочный пакет Maven:

Адрес официального сайта:maven.apache.org/download.success...

Многие новички не знают какой выбрать при скачивании с официального сайта Вот краткое введение.

  • bin (двоичный) представляет двоичный файл класса, скомпилированный из исходного файла Java, а src (исходный) представляет исходный файл Java.
  • В обычных условиях можно выбрать bin-файл для установки; если вы хотите скомпилировать его самостоятельно, вы можете выбрать версию src.
  • Формат сжатия tar.gz подходит для операционных систем Unix, а zip подходит для операционных систем Windows, но не абсолютно.

Второй шаг — разархивировать загруженный установочный пакет и скопировать путь:

  • bin: содержит все сценарии, запускаемые Maven для настройки команд Java, подготовки среды выполнения и последующего выполнения команд Java.
  • Загрузочный каталог: этот каталог содержит только файл Plebus-Classworlds-XXX-JAR, который представляет собой каркасную структуру погрузчика, эквивалентную по умолчанию Java-загрузчику класса Java, предоставляя синтаксис Richer для конфигурации, Maven использует этот загрузчик нагрузки на свой собственный класс библиотеки.
  • каталог conf: В этом каталоге находится очень важный файл settings.xml. Вы можете изменить этот файл напрямую, чтобы глобально настроить поведение Maven; вы также можете скопировать этот файл в~/.m2/каталог (~ представляет пользовательский каталог), изменение этого файла может настроить поведение Maven в пользовательской области.
  • Каталог lib: этот каталог содержит библиотеки классов Java, необходимые для запуска Maven, включая сторонние библиотеки классов, от которых зависит Maven, например slf4j-api.jar.

Третий шаг — настроить переменные среды.

Откройте терминал и введитеvim ~/.bash_profileКоманда открывает файл bash_profile:

Файл bash_profile используется для настройки переменных среды и запуска программ.Подробнее см.:

Блог woohoo.cn на.com/Kevin Grace/…

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

export M2_HOME=/Users/maweiqing/cmower/save/apache-maven-3.8.3
export PATH=${PATH}:${M2_HOME}/bin

После сохранения и выхода вы можете выполнитьsource ~/.bash_profileЧтобы конфигурация вступила в силу:

Четвертый шаг, проверьте, вступила ли конфигурация в силу

входитьmvn -vЕсли команда выводит следующее, конфигурация выполнена успешно:

Если это не подействует, попробуйте снова открыть окно терминала.mvn -vЗаказ.

2) варить установку в один клик

Первый шаг, используйтеbrew install mavenУстановка команд одним щелчком мыши и автоматически настроить переменные среды

Второй шаг,mvn -vкоманда для проверки версии

Во-вторых, инвентаризация файлов конфигурации Maven.

Maven основан на POM (объектной модели проекта), и вся конфигурация проекта будет помещена в файл 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">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.itwanger</groupId>
    <artifactId>MavenDemo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>MavenDemo</name>
</project>
  • Первая строка — это заголовок XML, указывающий версию и кодировку XML-документа.
  • project является корневым элементом, который объявляет некоторые связанные с POM пространства имен и элементы xsd.
  • modelVersion указывает версию текущего POM.Для Maven 3 значение может быть только 4.0.0.
  • GroupID определяет, какая организация, к которому принадлежит проект, обычно обратный порядок доменного имени Организации. Например, мое доменное имя - iTwanger.com, поэтому GroupID является COM.itwanger.
  • ArtifactId определяет уникальный идентификатор проекта в организации.
  • version указывает текущую версию проекта, SNAPSHOT означает снимок, указывающий, что проект все еще находится в стадии разработки.
  • name объявляет более удобное имя проекта.

Три элемента groupId, ArtiftId и Version определяют базовые координаты проекта.В мире Maven любой jar и pom различаются на основе этих координат.

<project>
...
<dependencies>
    <dependency>
        <groupId>实际项目</groupId>
     <artifactId>模块</artifactId>
     <version>版本</version>
     <type>依赖类型</type>
     <scope>依赖范围</scope>
     <optional>依赖是否可选</optional>
     <!—主要用于排除传递性依赖-->
     <exclusions>
         <exclusion>
           <groupId>…</groupId>
          <artifactId>…</artifactId>
       </exclusion>
     </exclusions>
  </dependency>
<dependencies>
...
</project>
  • Зависимости могут содержать одну или несколько элементов зависимостей для объявления одного или нескольких проектных зависимостей.
  • GroupId, Artifactid и версия формируют базовые координаты зависимости.
  • type указывает тип зависимости, по умолчанию jar.
  • scope указывает область зависимости (подробности см. нижеОбласть зависимостичасть).
  • optional отмечает, является ли зависимость необязательной (подробности см. ниже).Зависит от необязательнойчасть).
  • исключения используются для исключения транзитивных зависимостей (подробности см.Исключение зависимостичасть).

Область зависимостиЕсть следующие:

  • compile, область зависимости по умолчанию, указывает, что зависимость должна участвовать в компиляции текущего проекта, а также задействованы последующие циклы тестирования и выполнения, что является относительно сильной зависимостью.
  • Тест, указывающий, что зависимость участвует только в тестовой работе, включая компиляцию и запуск тестового кода. Типичный пример - Junit.
  • runtime, а это означает, что зависимость не обязательно должна участвовать в компиляции проекта, но она должна участвовать в последующем тестировании и запуске.
  • при условии, что означает, что его не нужно включать в упаковку, и другие контейнеры это обеспечат. Эквивалентен компиляции, но исключает действия на этапе упаковки.
  • system, с точки зрения участия, аналогичен предоставленному, но он не решается через репозиторий Maven, что может привести к тому, что сборка будет непереносимой, и ее следует использовать с осторожностью.

отранзитивная зависимость:

Например, по электронной почте проекта - электронная почта, например, аккаунт-электронная почта имеет зависимый от Spring-Code Compiele. Диапазон пружинного кода имеет компилирование Commons-loging-зависимого диапазона, а затем регинозащитный рейтинг, станет диапазоном электронной почты Компилированные зависимости, Commons-Logging - это переходная зависимость учетной записи-электронной почты:

С механизмом транзитивных зависимостей при использовании пружинной структуры не придется учитывать то, что она зависит, не беспокойтесь о внедрении ненужных зависимостей. Каждый разборка Maven напрямую зависит от POM, косвенно зависимыми, необходимые для формирования транзитивных зависимостей, введенных в текущий проект.

озависимый необязательный:

В проекте A зависит от B, а B зависит от X и Y. Если все три области компилируются, то X и Y являются транзитивными зависимостями области компиляции A, но если я хочу, чтобы X и Y не были переходными зависимостями A, если вы его не используете, вы можете настроить дополнительные зависимости следующим образом:

<project>  
    <modelVersion>4.0.0</modelVersion>  
    <groupId>com.itwanger</groupId>  
    <artifactId>project-b</artifactId>  
    <version>1.0.0</version>  
    <dependencies>  
        <dependency>  
            <groupId>mysql</groupId>  
            <artifactId>mysql-connector-java</artifactId>  
            <version>5.1.10</version>  
            <optional>true</optional>  
        </dependency>  
        <dependency>  
            <groupId>postgresql</groupId>  
            <artifactId>postgresql</groupId>  
            <version>8.4-701.jdbc3</version>  
            <optional>true</optional>  
        </dependency>  
    </dependencies>  
</project>

оИсключение зависимости:

Иногда вы ввели зависимости, содержащие зависимости, которые вы не хотите, и вы хотите импортировать то, что вы хотите. В этом случае вам необходимо исключить зависимости. Например, Spring-Boot-Starter-Web на рисунке ниже поставляется с входным документом. Пакет, я хочу ввести Log4J2, поэтому я сначала исключаю пакет зависимостей в Vogback, а затем импортировать нужный пакет.

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-web</artifactId>
	<version>2.5.6</version>
	<exclusions>
		<exclusion>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-logging</artifactId>
		</exclusion>
	</exclusions>
</dependency>
<!-- 使用 log4j2 -->
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-log4j2</artifactId>
	<version>2.5.6</version>
</dependency>

При объявлении исключения вам нужны только groupId и ArtiftId, а не элемент версии, потому что groupId и ArtiftId могут однозначно найти зависимость.

3. Репозиторий Maven

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

Например, в проекте используются зависимости плагина пагинации:

<dependency>
      <groupId>com.github.pagehelper</groupId>
      <artifactId>pagehelper-spring-boot-starter</artifactId>
      <version>1.1.0</version>
</dependency>

Тогда его соответствующий путь к складу выглядит следующим образом:

Склады могут быть из следующих типов:

1) Местный склад

Когда Maven компилирует или тестирует, если ему нужно использовать файл зависимостей, он всегда использует файл зависимостей из локального репозитория на основе координат.

По умолчанию, будь то Windows, macOS или Linux, у каждого пользователя будет указан путь в его пользовательском каталоге..m2/repository/каталог репозитория.

Если вы хотите настроить адрес каталога локального склада, вы можете отредактировать файл~/.m2/settings.xml, установите значение элемента localRepository на адрес репозитория, который вы хотите, например:

<localRepository>/path/to/local/repo</localRepository>

если не найдено~/.m2/settings.xmlЕсли это так, вы можете перейти в каталог установки Maven (упомянутый вышекаталог confПерейти к копии.

2) Удаленный склад

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

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

Однако скорость доступа к центральному складу по умолчанию относительно низкая, обычно мы выбираем удаленный склад Ali Maven.

<repositories>
	<repository>
		<id>ali-maven</id>
		<url>http://maven.aliyun.com/nexus/content/groups/public</url>
		<releases>
			<enabled>true</enabled>
		</releases>
		<snapshots>
			<enabled>true</enabled>
			<updatePolicy>always</updatePolicy>
			<checksumPolicy>fail</checksumPolicy>
		</snapshots>
	</repository>
</repositories>
  • репозитории могут содержать один или несколько элементов репозитория для объявления одного или нескольких репозиториев.
  • id, единственный идентификатор, объявленный складом. Следует отметить, что идентификатор, используемый центральным хранилищем, поставляемым с Maven, является центральным. Если другие склады также используют этот идентификатор, конфигурация центрального хранилища будет перезаписана.
  • url, который указывает на адрес склада.
  • выпуски и моментальные снимки используются для управления разрешениями Maven на загрузку артефактов выпуска и моментальных снимков.
  • Когда включенный подэлемент имеет значение true, это означает, что артефакты релиза и моментального снимка могут быть загружены из репозитория.
  • дочерний элемент updatePolicy для настройки частоты проверки Maven обновлений из удаленного репозитория.
    • Значение по умолчанию — ежедневно, экспресс-проверка раз в сутки;
    • Необязательное значение never означает никогда не проверять;
    • Необязательное значение всегда означает проверку обновлений для каждой сборки;
    • Необязательное значение interval означает проверку обновлений каждые X минут (X — произвольное целое число).
  • Подэлемент checksumPolicy используется для настройки политики Maven для проверки контрольной суммы. При загрузке компонента Maven проверит, если проверка не удалась,
    • Когда значением checksumPolicy является предупреждение по умолчанию, Maven выводит предупреждающее сообщение при выполнении сборки;
    • Значение сбоя, Maven обнаружил ошибку четности. Пусть не удается построить;
    • Когда значение игнорируется, Maven полностью игнорирует проверку.

Другая цель создания удаленного репозитория —Компоненты собственного проекта удобно размещать на удаленных складах, чтобы ими могли пользоваться другие члены команды., то нужно настроить элемент DistributionManagement:

<distributionManagement>
        <repository>
            <id>releases</id>
            <name>public</name>
            <url>http://59.50.95.66:8081/nexus/content/repositories/releases</url>
        </repository>
        <snapshotRepository>
            <id>snapshots</id>
            <name>Snapshots</name>
            <url>http://59.50.95.66:8081/nexus/content/repositories/snapshots</url>
        </snapshotRepository>
</distributionManagement>
  • репозиторий представляет репозиторий для артефактов версии выпуска.
  • snapshotRepository Репозиторий для версий моментальных снимков (для разработки и тестирования).
  • Оба элемента должны быть настроены с идентификатором, именем и URL. Идентификатор является уникальным идентификатором удаленного склада, имя для удобного чтения, а URL представляет собой адрес склада.

После настройки выполните командуmvn clean deploy, Maven развернет проект в соответствующем удаленном репозитории. Является ли проект моментальным снимком или версией выпуска, определяется выпусками и моментальными снимками в предыдущем элементе конфигурации удаленного репозитория.

3) Зеркальное отображение склада

Если репозиторий X может предоставить все, что хранится в репозитории Y, то X можно считать зеркалом Y. Обычно мы добавляем образ Alibaba Cloud в файл settings.xml:

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

Опции для элемента mirrorOf:

  • <mirrorOf>*</mirrorOf>, Соответствие всему удаленному репозиторию.
  • <mirrorOf>external:*</mirrorOf>, соответствует всем удаленным репозиториям, кроме тех, которые используют localhost, используйтеfile://Кроме соглашения. То есть сопоставить все удаленные репозитории, которых нет на локальной машине.
  • <mirrorOf>repo1,repo2</mirrorOf>, соответствует repo1 и repo2 и разделяет несколько удаленных репозиториев запятыми.
  • <mirrorOf>*,!repo1<mirrorOf>, соответствует всем удаленным репозиториям, кроме repo1, используйте восклицательный знак, чтобы исключить репозитории из сопоставления.

В приведенном выше примере<mirrorOf>central</mirrorOf>Указывает, что любой запрос к центральному хранилищу будет направляться на это зеркало.

4) Частный сервер

Частный сервер — это особый вид удаленного склада, который устанавливается в локальной сети. Когда Maven необходимо загрузить компонент, он сначала запрашивает его с частного сервера.Если компонент не существует на частном сервере, он будет загружен из внешнего удаленного репозитория и кэширован на частном сервере.

Частные серверы имеют следующие преимущества:

  • Сохранить скорость доступа в Интернет
  • Ускорение сборки Maven
  • Улучшите стабильность, улучшите контроль
  • Снизить нагрузку на центральный склад

5) Поиск службы склада

Рекомендуемые два склада предоставляют услуги поиска на сайте:

4. Используйте Maven

1) Общие команды Maven

  • mvn clean: указывает на запуск операции очистки (данные в целевой папке будут очищены по умолчанию).
  • mvn clean compile: Указывает, что запускает очистку сначала, а затем запускайте компиляцию, и код будет скомпилирован в целевую папку.
  • mvn clean test: запустить очистку и тесты.
  • mvn clean package: Выполнить очистку и упаковку.
  • mvn clean install: запустите clean and install, который установит упакованный пакет в локальный репозиторий, чтобы другие проекты могли его вызывать.
  • mvn clean deploy: выполнить очистку и опубликовать (опубликовать на частном сервере).

2) Общие свойства POM Maven

  • ${project.build.sourceDirectory}: основной каталог исходного кода проекта, по умолчаниюsrc/main/java/
  • ${project.build.testSourceDirectory}: Исходный каталог проекта по умолчанию./src/test/java/
  • ${project.build.directory}: проект создает выходной каталог, по умолчаниюtarget/
  • ${project.build.outputDirectory}: Выходной каталог компиляции основного кода проекта, по умолчаниюtarget/classes/
  • ${project.build.testOutputDirectory}: выходной каталог компиляции тестового кода проекта, по умолчаниюtarget/testclasses/
  • ${project.groupId}: идентификатор группы проекта.
  • ${project.artifactId}: идентификатор артефакта проекта.
  • ${project.version}: версия проекта, в${version}эквивалентность
  • ${project.build.finalName}: имя выходного файла упаковки проекта, по умолчанию${project.artifactId}${project.version}

3) Intellij IDEA настраивает Maven

4) Общие плагины Maven

Плагины — это основная функция Maven, которая позволяет повторно использовать общую логику сборки в нескольких проектах. Плагины доступны для:

  • Создайте файл jar,
  • Создать военный файл,
  • Скомпилировать код,
  • Код модульного теста,
  • Создание проектной документации и т.д.

Часто используемые плагины:

  • maven-antrun-plugin позволяет пользователям запускать задачи Ant в проектах Maven. Пользователи могут напрямую написать Target в режиме Ant в конфигурации плагина, а затем передать его целевому объекту запуска плагина для выполнения. Этот подключаемый модуль особенно полезен в некоторых проектах, переходящих с Ant на Maven. Кроме того, когда вы обнаружите, что вам нужно написать некоторые задачи с высокой степенью настройки, и вы чувствуете, что Maven недостаточно гибок, вы также можете реализовать это в Ant. Цель запуска maven-antrun-plugin обычно связана с жизненным циклом.
  • maven-assembly-plugin, сделать дистрибутив проекта, который может содержать исполняемые файлы проекта, исходный код, readme, платформенные скрипты и т.д. maven-assembly-plugin поддерживает различные основные форматы, такие как zip, tar.gz, jar и war и т. д. Можно легко контролировать, какие файлы упаковываются, например, пользователи могут использовать детализацию на уровне файлов, гранулярность на уровне наборов файлов, модуль- гранулярность уровня гранулярности, а также пакет управления гранулярностью уровня зависимостей, кроме того, также поддерживаются конфигурации включения и исключения. maven-assembly-plugin требует, чтобы пользователи экспресс-упаковки использовали файл метаданных с именем Assembly.xml, единственная цель которого может быть вызвана непосредственно из командной строки или может быть привязана к жизненному циклу.
  • maven-help-plugin, небольшой вспомогательный инструмент, простейшая help:system может печатать все доступные переменные окружения и системные свойства Java. help: Effective-pom и help: Effective-settings являются наиболее полезными, они печатают действующий POM и действующие настройки проекта соответственно. Эффективный POM относится к XML после слияния всех родительских POM (включая Super POM). уверен в определенном POM. Когда вы знаете, откуда поступила эта информация, вы можете просмотреть действующий POM.
  • maven-javadoc-plugin, подключаемый модуль javadoc, публикует javadoc исходного кода.

Ссылка на ссылку:

Доктор Дудл:Fujii.top/2018/01/01/…
Ханг Цзянь: «Путь развития Java-инженеров»
Сюй Сяобинь:Woohoo.info Q.capable/article/201…

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

Это 72-я статья рубрики «Путь к продвинутым программистам Java» (не забудьте заказать звездочку). Эта колонка юмористическая, простая для понимания, чрезвычайно дружелюбная и удобная для энтузиастов Java😄, включая, помимо прочего, основу Java, структуру коллекции Java, Java IO, параллельное программирование Java, виртуальную машину Java, корпоративную разработку Java (SSM, Spring Boot) и другие основные точки знаний.

GitHub.com/IT Ван Эр/до…

Давайте вместе станем лучшими Java-инженерами!