Начало работы с учебным пособием по Maven

maven

:notebook: Эта статья была заархивирована в: "blog"

Введение

что такое мейвен

Maven — это инструмент управления проектами. Он отвечает за управление практически всем процессом разработки проекта.

  • Версия- maven имеет свои собственные определения версий и правила.
  • Построить- Maven поддерживает множество типов приложений, и для каждого поддерживаемого типа приложений определен набор правил сборки и наборов инструментов.
  • управление выводом- maven может управлять продуктами сборки проекта и добавлять их в пользовательскую библиотеку. Эту функцию можно использовать для поведения доставки между проектными группами и другими отделами.
  • зависимости- maven подробно анализирует и разделяет характеристики зависимостей, чтобы избежать путаницы с зависимостями и взаимного загрязнения в процессе разработки
  • Документация и результаты сборки- Команда сайта Maven поддерживает публикацию различной документации, включая различные выходные данные процесса сборки, javadoc, документацию по продукту и т. д.
  • проектные отношения- Большой проект обычно состоит из нескольких небольших проектов или модулей, которыми легко управлять с помощью maven.
  • управление переносимостью- maven может выводить разные виды результатов для разных сценариев разработки.

Жизненный цикл Мавена

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

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

Стандартная структура проекта Maven

Стандартная структура проекта Maven выглядит следующим образом:

|-- pom.xml(maven的核心配置文件)
|-- src
|-- main
	|-- java(java源代码目录)
	|-- resources(资源文件目录)
|-- test
    |-- java(单元测试代码目录)
|-- target(输出目录,所有的输出物都存放在这个目录下)
    |-- classes(编译后的class文件存放处)

Maven «Конвенция важнее конфигурации»

Так называемое «соглашение о конфигурации» не является полностью неизменяемым в maven, это просто значения по умолчанию для некоторых конфигураций. Но без необходимости нет необходимости изменять эти соглашения. Структура хранения файлов maven по умолчанию выглядит следующим образом:

Задачи на каждом этапе знают, как правильно выполнять свою работу.Например, задача компиляции знает, что нужно скомпилировать все java-файлы из src/main/java и сохранить файлы выходных классов в target/classes.

Для maven принятие стратегии «соглашение важнее конфигурации» может уменьшить рабочую нагрузку по изменению конфигурации, а также снизить стоимость обучения.Что еще более важно, это вводит унифицированную спецификацию для проекта.

Спецификация версии Maven

Maven использует следующие элементы для уникального поиска вывода:

  • groupId- Идентификаторы групп, организаций. По соглашению для идентификации сообщества оно начинается с обратного доменного имени организации, создавшей проект. Обычно соответствует структуре пакета JAVA. например org.apache
  • artifactId- Уникальный идентификатор для отдельных предметов. Такие, как наш кот, общины и так далее. Не включайте точку (.) в ArtiftId.
  • version- Конкретная версия предмета.
  • packaging- Тип проекта, по умолчанию jar, который описывает вывод проекта после упаковки. Проект типа jar создает файл JAR, а проект типа war создает веб-приложение.

Maven имеет собственную спецификацию версии, которая обычно определяется следующим образом.<major version>,<minor version>,<incremental version>-<qualifier>, например 1.2.3-бета-01. Следует отметить, что алгоритм для собственной версии суждения maven заключается в том, что основная, второстепенная, инкрементная части сравниваются по числам, а часть квалификатора сравнивается по строкам, поэтому будьте осторожны при сравнении между альфа-2 и альфа-15, лучше всего использовать формат альфа-02.

Maven может использовать несколько специальных строк SNAPSHOT, LATEST, RELEASE во время управления версиями. Например, «1.0-СНИМОК». Смысл и логика обработки каждой части следующие:

  • SNAPSHOT- Эта версия обычно используется в процессе разработки, что указывает на нестабильную версию.
  • LATEST- Относится к последнему выпуску определенного компонента. Этот выпуск может быть версией выпуска или версией моментального снимка, в зависимости от того, какое время является последним.
  • RELEASE- Относится к последнему выпуску.

Установить

Адрес загрузки официального сайта

Для установки среды Linux можно использовать сценарий установки в один клик, который я написал:GitHub.com/Epiphany/OS-Graph…

Настроить переменные среды

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

(1) Разархивируйте сжатый пакет (в качестве примера возьмите apache-maven-3.3.9-bin.zip)

(2) Добавьте переменную среды MAVEN_HOME, значением является путь установки apache-maven-3.3.9.

(3) Добавьте %MAVEN_HOME%\bin в конец значения переменной среды Path.

(4) Введите mvn –version в cmd.Если появится информация о версии maven, конфигурация выполнена успешно.

Конфигурация локального репозитория

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

Откройте каталог установки maven и откройте файл settings.xml в каталоге conf.

Вы можете настроить локальное хранилище, обратившись к следующему рисунку.

Первый проект Maven.

Создайте проект Maven в Intellij

(1) Создайте проект Maven

Щелкните File -> New -> Project по очереди, чтобы открыть диалоговое окно Create Project и выбрать проект Maven.

(2) Введите информацию о проекте

(3) Щелкните интерфейс инструмента Maven на боковой панели Intellij, есть несколько команд maven, которые можно использовать непосредственно для помощи в сборке.

Создайте проект Maven в Eclipse.

(1) Плагин Maven

Чтобы создать проект Maven в Eclipse, вам необходимо установить подключаемый модуль Maven.

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

Нажмите «Справка» -> «Eclipse Marketplace», найдите ключевое слово maven и выберите для установки подключаемый модуль Maven, соответствующий красному полю.

(2) Конфигурация среды Maven

Нажмите Окно -> Настройки

Как показано на изображении ниже, настройте расположение файла settings.xml.

(3) Создайте проект Maven

Файл -> Создать -> Проект Maven -> Далее, в следующем окне вы увидите множество шаблонов проектов, выберите подходящий шаблон.

Далее задайте параметры проекта следующим образом:

groupIdЭто уникальный идентификатор проектной организации, который фактически соответствует структуре пакета JAVA, то есть структуре каталогов java в основном каталоге.

artifactIdЭто уникальный идентификатор проекта, а имя фактического соответствующего проекта — это имя корневого каталога проекта.

Нажмите «Готово», и Eclipse создаст проект Maven.

(4) Сборка с помощью Maven

Построить в Eclipse

Щелкните правой кнопкой мыши проект Elipse -> Запустить от имени, чтобы увидеть множество действий Maven. Эти операции эквивалентны команде maven. Например, Maven clean, что эквивалентно команде mvn clean.

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

Метод сборки команды Maven

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

Войдите в каталог, в котором находится проект, и введите команду maven.

Руководства пользователя

Как добавить внешний пакет зависимостей jar

Добавить пакет jar зависимостей в проект Maven очень просто, если вводится соответствующий файл POM.<dependency>Этикетки подойдут.

Обратитесь к следующему примеру:

<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.zp.maven</groupId>
  <artifactId>MavenDemo</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>
  <name>MavenDemo</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <junit.version>3.8.1</junit.version>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>${junit.version}</version>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
      <version>1.2.12</version>
      <scope>compile</scope>
    </dependency>
  </dependencies>
</project>

<dependency>Четыре наиболее часто используемых тега атрибута для тегов:

  • <groupId>- Уникальный идентификатор проектной организации, который фактически соответствует структуре пакета JAVA.
  • <artifactId>- Уникальным идентификатором проекта, который фактически соответствует названию проекта, является имя корневого каталога проекта.
  • <version>- Номер версии пакета jar. Вы можете указать номер версии напрямую или установить значение свойства в теге свойств.
  • <scope>- Объем пакета jar. Вы можете заполнить компиляцию, время выполнения, тест, систему и предоставленный. Используется для выбора соответствующего пути к классам при компиляции, тестировании и других сценариях.

Как найти пакеты jar

допустимыйmvnrepository.com/Найдите на сайте нужную версию пакета jar.

Например, если вы хотите использовать log4j, вы можете найти требуемый номер версии, затем скопировать соответствующую информацию тега maven и добавить ее в файл pom .xml.

Как использовать плагин Maven (плагин)

Чтобы добавить плагин Maven, вы можете добавить в файл pom.xml<plugin>Этикетка.

<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-compiler-plugin</artifactId>
      <version>3.3</version>
      <configuration>
        <source>1.7</source>
        <target>1.7</target>
      </configuration>
    </plugin>
  </plugins>
</build>

<configuration>Теги используются для настройки некоторых параметров использования плагина.

Как скомпилировать несколько проектов одновременно

Предположим, вы хотите создать родительский проект maven с двумя подпроектами: my-app и my-webapp:

+- pom.xml
+- my-app
| +- pom.xml
| +- src
|   +- main
|     +- java
+- my-webapp
| +- pom.xml
| +- src
|   +- main
|     +- webapp

pom.xml проекта приложения выглядит следующим образом, ключевым моментом является введение в модули двух подмодулей:

<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.mycompany.app</groupId>
  <artifactId>app</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>pom</packaging>
 
  <modules>
    <module>my-app</module>
    <module>my-webapp</module>
  </modules>
</project>

Когда вы выбираете компиляцию XXX, та же операция выполняется для всех его модулей по очереди.

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

Для получения более подробной информации см.:maven.apache.org/plugins/

maven-antrun-plugin

maven-antrun-plugin позволяет пользователям запускать задачи Ant в проектах Maven. Пользователи могут напрямую написать Target в режиме Ant в конфигурации плагина, а затем передать его целевому объекту запуска плагина для выполнения. Этот подключаемый модуль особенно полезен в некоторых проектах, переходящих с Ant на Maven. Кроме того, когда вы обнаружите, что вам нужно написать некоторые задачи с высокой степенью настройки, и вы чувствуете, что Maven недостаточно гибок, вы также можете реализовать это в Ant. Цель запуска maven-antrun-plugin обычно связана с жизненным циклом.

maven-archetype-plugin

Архтип относится к скелету проекта.Команда Maven, которую сначала выполняет новичок в Maven, может бытьmvn archetype:generate, что на самом деле позволяет maven-archetype-plugin генерировать очень простой скелет проекта, чтобы помочь разработчикам быстро приступить к работе. Некоторые люди также могут видеть некоторые документы, написанныеmvn archetype:create, но на самом деле создание цели устарело в пользу создания цели, которая использует интерактивный способ, чтобы предложить пользователю ввести необходимую информацию для создания проекта для лучшего опыта. У maven-archetype-plugin есть и другие цели, чтобы помочь пользователям определить свои собственные архетипы проектов.Например, если продукт необходимо доставить многим клиентам для вторичной разработки, вы можете предоставить им архетип, чтобы помочь им быстро приступить к работе.

maven-assembly-plugin

Назначение maven-assembly-plugin — упаковать проект, который может содержать исполняемые файлы проекта, исходный код, readme, скрипты платформы и т. д. maven-assembly-plugin поддерживает различные основные форматы, такие как zip, tar.gz, jar и war и т. д. Можно легко контролировать, какие файлы упаковываются. конфигурации также поддерживаются. maven-assembly-plugin требует, чтобы пользователи использовали файл с именемassembly.xmlФайл метаданных для экспресс-упаковки, его единственная цель может быть вызвана непосредственно из командной строки или может быть привязана к жизненному циклу.

maven-dependency-plugin

Чаще всего плагин maven-dependency-plugin используется для анализа зависимостей проекта,dependency:listВозможность перечислить список зависимостей, к которым окончательно разрешается проект,dependency:treeМожно дополнительно описать дерево зависимостей проекта,dependency:analyzeМожет сообщить вам о потенциальных проблемах с зависимостями вашего проекта, и цель предупредит вас, если у вас есть зависимости, которые используются напрямую, но не объявлены. maven-dependency-plugin также имеет много целей, чтобы помочь вам манипулировать файлами зависимостей, такими какdependency:copy-dependenciesМожет копировать зависимости проекта из локального репозитория Maven в определенную папку.

maven-enforcer-plugin

В более крупной организации или команде вы не можете гарантировать, что все участники знакомы с Maven, и для них становится нормальным делать что-то глупое, например, вводить в проект внешнюю зависимость SNAPSHOT и вызывать нестабильность сборки, используя версия Maven, которая не со всеми согласна и постоянно жалуется на странные проблемы сборки. maven-enforcer-plugin может помочь вам избежать таких проблем, он позволяет создавать ряд правил для обеспечения соответствия, включая установку версии Java, установку версии Maven, отключение определенных зависимостей, отключение зависимостей SNAPSHOT. Пока правила настроены в родительском POM, а затем позволяют всем наследовать, когда правила нарушаются, Maven сообщит об ошибке. Помимо стандартных правил, вы можете расширить плагин и написать свои собственные правила. Цель применения плагина maven-enforcer-plugin отвечает за проверку правил и по умолчанию привязана к фазе проверки жизненного цикла.

maven-help-plugin

maven-help-plugin — небольшой вспомогательный инструмент, простейшийhelp:systemВсе доступные переменные среды и системные свойства Java могут быть распечатаны.help:effective-pomиhelp:effective-settingsНаиболее полезно, они печатают действующий POM и действующие настройки проекта соответственно, действующий POM относится к XML после слияния всех родительских POM (включая Super POM), когда вы не уверены, откуда берется некоторая информация о POM, вы можете просмотреть его Действительный POM. То же самое относится и к действительным параметрам, особенно когда вы обнаружите, что настроенный вами файл settings.xml не действует, вы можете использоватьhelp:effective-settingsпроверять. Кроме того, цель описания maven-help-plugin может помочь вам описать информацию о любом плагине Maven, а цель всех профилей и цель активных профилей помогают просмотреть профиль проекта.

maven-release-plugin

Назначение maven-release-plugin — помочь автоматизировать выпуск релизов проекта, и он опирается на информацию SCM в POM.release:prepareОн используется для подготовки к выпуску версии.Конкретная работа включает в себя проверку незафиксированного кода, проверку зависимостей SNAPSHOT, обновление версии проекта SNAPSHOT до версии RELEASE, тегирование проекта и т. д.release:performЗатем проверьте исходный код RELEASE в теге, соберите и опубликуйте. Релиз — это очень тривиальная работа, она включает в себя различные проверки, а так как эта работа нужна только изредка, легко упустить некоторые детали вручную, maven-release-plugin делает эту работу очень быстрой, легкой и менее подверженной ошибкам. Различные цели плагина maven-release-plugin обычно вызываются непосредственно в командной строке, поскольку выпуски выпусков, очевидно, не являются частью ежедневного жизненного цикла сборки.

maven-resources-plugin

Чтобы сделать структуру проекта более понятной, Maven по-разному обрабатывает файлы кода Java и файлы ресурсов, maven-compiler-plugin используется для компиляции кода Java, а maven-resources-plugin используется для обработки файлов ресурсов. Каталог основного файла ресурсов по умолчанию:src/main/resources, многим пользователям потребуется добавить дополнительные каталоги файлов ресурсов, что можно сделать, настроив maven-resources-plugin. Кроме того, фильтрация файлов ресурсов также является важной функцией Maven.Вы можете использовать свойства Maven в виде *${propertyName}* в файлах ресурсов, а затем настроить maven-resources-plugin для включения фильтрации файлов ресурсов, а затем вы можете настроить таргетинг на разные среды. Передавайте значения свойств через командную строку или профиль для более гибких сборок.

maven-surefire-plugin

Вероятно, по историческим причинам плагином для выполнения тестов в Maven 2.3 является не maven-test-plugin, а maven-surefire-plugin. На самом деле, в большинстве случаев, пока ваши тестовые классы следуют общепринятым соглашениям о командах (оканчивающиеся на Test, заканчивающиеся на TestCase или начинающиеся на Test), вы вряд ли когда-либо будете знать о существовании плагина. Однако, если вы хотите пропустить тесты, исключить определенные классы тестов или использовать некоторые функции TestNG, полезно знать некоторые параметры конфигурации плагина maven-surefire. Напримерmvn test -Dtest=FooTestРезультатом такой команды является запуск только тестового класса FooTest, что достигается за счет управления тестовым параметром плагина maven-surefire-plugin.

build-helper-maven-plugin

Maven по умолчанию позволяет указать только один основной каталог кода Java и один тестовый каталог кода Java.Хотя на самом деле это соглашение, которому следует следовать как можно больше, иногда вам может потребоваться указать несколько каталогов исходного кода (например, для работы с устаревшими проектами), build-helper Цель add-source в -maven-plugin служит этой цели и обычно привязана к фазе generate-sources жизненного цикла по умолчанию для добавления дополнительных исходных каталогов. Следует подчеркнуть, что эта практика по-прежнему не рекомендуется, потому что она нарушает соглашения Maven, и вы можете столкнуться с другими плагинами, строго придерживающимися соглашений, которые не распознают правильно дополнительный исходный каталог.

Еще одна очень полезная цель build-helper-maven-plugin — прикрепить-артефакт, используя эту цель, вы можете выбрать некоторые файлы проекта в виде классификатора для генерации вспомогательных артефактов и одновременно установить их в локальный репозиторий или развернуть в удаленный репозиторий.

exec-maven-plugin

exec-maven-plugin хорошо понятен. Как следует из названия, он позволяет запускать любую локальную системную программу. В некоторых конкретных случаях запуск программы вне Maven может быть самым простым решением проблемы. Этоexec:execКонечно, плагин также позволяет настраивать соответствующие параметры работы программы. В дополнение к цели exec exec-maven-plugin предоставляет цель java, которая требует, чтобы вы предоставили параметр mainClass, который затем может использовать зависимости текущего проекта в качестве пути к классам для запуска этого mainClass в той же JVM. Иногда, чтобы просто продемонстрировать Java-программу командной строки, вы можете настроить соответствующие рабочие параметры exec-maven-plugin в POM, а затем запустить команду напрямую.mvn exec:javaчтобы увидеть, как это работает.

jetty-maven-plugin

При веб-разработке почти неизбежно открывать браузер для тестирования приложения вручную.Этот метод тестирования обычно заключается в упаковке проекта в военный файл, затем его развертывании в веб-контейнере, а затем запуске контейнера для проверки. очевидно, очень много времени. Чтобы помочь разработчикам сэкономить время, был создан плагин jetty-maven-plugin, который полностью совместим со структурой каталогов проектов Maven, может периодически проверять исходные файлы и автоматически обновлять встроенный веб-контейнер Jetty при обнаружении изменений. . После выполнения некоторых базовых настроек (таких как contextPath веб-приложения и временной интервал для автоматического сканирования изменений) вам просто нужно выполнитьmvn jetty:run, а затем изменить код в среде IDE. Код автоматически компилируется средой IDE, и изменения генерируются, а затем обнаруживаются плагином jetty-maven и обновляются в контейнере Jetty. В это время вы можете напрямую протестировать веб-сайт. страница. Следует отметить, что jetty-maven-plugin не является официальным плагином, размещенным на Apache или Codehaus, поэтому при его использовании требуется дополнительная настройка.settings.xmlДобавлен элемент pluginGroups группы org.mortbay.jetty pluginGroup.

versions-maven-plugin

Многие пользователи Maven столкнулись с такой проблемой, когда проект содержит большое количество модулей, то становится напрягает коллективно обновлять версию для них, есть ли какой-нибудь автоматизированный инструмент, который поможет это сделать? (Конечно, вы можете использовать инструмент для работы с текстом, такой как sed, но это выходит за рамки этой статьи). Ответ — да, version-maven-plugin предоставляет множество целей, помогающих вам управлять различной информацией о версиях проектов Maven. Например, наиболее часто используемая командаmvn versions:set -DnewVersion=1.1-SNAPSHOTпоможет обновить версию всех модулей до 1.1-SNAPSHOT. Плагин также обеспечивает некоторые другие полезные цели: обновления зависимостей отображения могут сообщить вам, какие обновления доступны для зависимостей вашего проекта; аналогичные обновления обновлений отображения-плагинов могут сообщить вам доступные обновления плагинов; тогда использование-последних-версий может автоматически обновлять все зависимости до последней версии для вас. Наконец, если вы довольны внесенными изменениями, вы можете использоватьmvn versions:commitОтправить, если вы не удовлетворены, вы также можете использоватьmvn versions:revertотменить.

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

Для более подробного описания команд, пожалуйста, обратитесь к:maven.apache.org/guides/int R…

жизненный цикл описание этапа
mvn validate Убедитесь, что проект правильный и что вся необходимая информация доступна для полной сборки
mvn generate-sources Сгенерируйте весь исходный код, который необходимо включить в процесс компиляции.
mvn process-sources Обработка исходного кода, например, фильтрация некоторых значений
mvn generate-resources Создайте все файлы ресурсов, которые необходимо включить в процесс упаковки.
mvn process-resources Скопируйте и обработайте файлы ресурсов в целевой каталог, готовый к упаковке
mvn compile Скомпилируйте исходный код проекта
mvn process-classes Постобработка скомпилированных файлов, например расширение байт-кода классов Java.
mvn generate-test-sources Сгенерировать весь исходный код теста, включенный в процесс компиляции теста.
mvn process-test-sources Обработка исходного кода теста, например фильтрация некоторых значений
mvn generate-test-resources Создание файлов ресурсов, необходимых для тестирования
mvn process-test-resources Скопируйте и обработайте файлы тестовых ресурсов в тестовый целевой каталог.
mvn test-compile Скомпилируйте исходный код теста в целевой каталог теста.
mvn test Запустите тесты, используя подходящую среду модульного тестирования. Эти тесты не должны требовать упаковки или распространения кода.
mvn prepare-package Перед собственно упаковкой выполните некоторые необходимые операции по подготовке к упаковке. Обычно это создает расширенную обработанную версию пакета (будет реализована в Maven 2.1+).
mvn package Упакуйте скомпилированный код в распространяемый формат, такой как JAR, WAR или EAR.
mvn pre-integration-test Выполните некоторые действия, необходимые перед запуском интеграционного теста. Например, создание среды, необходимой для интеграционного тестирования.
mvn integration-test При необходимости обработайте пакет и опубликуйте его в среде, где могут выполняться интеграционные тесты.
mvn post-integration-test Выполните некоторые действия, необходимые после запуска интеграционного теста. Например, очистка среды интеграционного тестирования.
mvn verify Выполните все проверки, чтобы убедиться, что пакет действителен и соответствует спецификациям качества.
mvn install Установите пакет в локальный репозиторий для использования другими локальными проектами в качестве зависимостей.
mvn deploy Скопируйте окончательный пакет в удаленный репозиторий, чтобы поделиться с другими разработчиками и проектами (обычно это связано с официальным выпуском).

Использовать параметры

-Dmaven.test.skip=true: пропустить модульные тесты (например: mvn clean package -Dmaven.test.skip=true)

Общая проблема

В чем разница между зависимостями и dependencyManagement, плагинами и pluginManagement?

dependencyManagement — это объявление пакета jar зависимостей, то есть, если вы объявляете зависимость в разделе dependencyManagement в проекте, maven не будет загружать зависимость, а объявление dependencyManagement может быть унаследовано.

Вариант использования dependencyManagement заключается в том, что при наличии родительского и дочернего проектов родительский проект может использовать dependencyManagement для объявления зависимых пакетов jar, которые необходимо использовать в дочернем проекте, а затем, когда одному или нескольким дочерним проектам необходимо загрузить плагин, вы можете В узле зависимостей подпроекта настроить только groupId и артефакт, чтобы завершить ссылку на плагин.

Основная цель dependencyManagement — унифицированное управление плагинами и обеспечение согласованности версий плагинов, используемых всеми подпроектами, аналогично плагинам и pluginManagement.

IDEA компилирует ошибку после изменения версии JDK

явление ошибки

Измените версию JDK и укажите источник и цель maven-compiler-plugin как 1.8 .

Затем выполните команду maven в Intellij IDEA и сообщите об ошибке:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.0:compile (default-compile) on project apollo-common: Fatal error compiling: 无效的目标版本: 1.8 -> [Help 1]

неправильная причина

Источники JDK maven не соответствуют указанной версии сборки JDK.

Руководство

  • Просмотр настроек проекта

Верен ли пакет SDK для проекта?

Путь к SDK правильный?

  • Просмотр настроек > Конфигурация Maven

Правильно ли JDK для импортера?

Прав ли бегун?

Повторно ввести зависимости

В Idea выберите модуль, используйтеCtrl+Alt+Shift+U, откройте граф зависимостей и найдите повторяющиеся ссылки. Если есть повторяющиеся ссылки, избыточные ссылки могут быть удалены.

Как упаковать пакет jar Spring Boot, который можно запустить напрямую

Вы можете использовать плагин spring-boot-maven-plugin

<build>
  <plugins>
    <plugin>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-maven-plugin</artifactId>
      <executions>
        <execution>
          <goals>
            <goal>repackage</goal>
          </goals>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>

Если вводится сторонний jar-пакет, как его упаковать?

Во-первых, чтобы добавить зависимости

<dependency>
  <groupId>io.github.dunwu</groupId>
  <artifactId>dunwu-common</artifactId>
  <version>1.0.0</version>
  <scope>system</scope>
  <systemPath>${project.basedir}/src/main/resources/lib/dunwu-common-1.0.0.jar</systemPath>
</dependency>

Далее вам нужно настроить плагин spring-boot-maven-plugin:

<build>
  <plugins>
    <plugin>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-maven-plugin</artifactId>
      <executions>
        <execution>
          <goals>
            <goal>repackage</goal>
          </goals>
        </execution>
      </executions>
      <configuration>
        <includeSystemScope>true</includeSystemScope>
      </configuration>
    </plugin>
  </plugins>
</build>

Лучшие практики

Унифицированное управление версиями через bom

используя подобныеspring-boot-dependenciesспособ унифицированного управления версиями зависимостей.

pom.xml форма зависимостей spring-boot:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.1.4.RELEASE</version>
<packaging>pom</packaging>

<!-- 省略 -->

<!-- 依赖包版本管理 -->
<dependencyManagement>
    <dependencies>
    <!-- 省略 -->
    </dependencies>
</dependencyManagement>

<build>
<!-- 插件版本管理 -->
<pluginManagement>
    <plugins>
    <!-- 省略 -->
    </plugins>
</pluginManagement>
</build>
</project>

Другие проекты вводят зависимости spring-boot для управления версиями зависимостей:

 <dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>${spring-boot.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

Цитаты и расширения