Заголовок спрашивал меня о Maven?

интервью
Заголовок спрашивал меня о Maven?

В чем разница между пакетом maven и установкой maven?

Каковы ваши часто используемые команды maven?

Что делает ?

Использовали ли вы другие инструменты сборки?В чем разница между maven и maven?

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

Нравится + Избранное, чтобы узнать серию, статьи включены в GitHubJavaEgg, N-линия Интернет-разработка основных навыков спектра оружия

1. Что такое Maven:

Maven — единственный, поддерживаемый Apache Software Foundation.Инструменты автоматизированной сборки, ориентированный на обслуживание платформы Java.сборка проектаиуправление зависимостями.

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

2. Что умеет Maven:

  • Добавить сторонний jar-пакет
  • Зависимости между пакетами jar: Maven может автоматически импортировать все другие пакеты jar, от которых зависит текущий пакет jar.
  • Получение сторонних jar-пакетов: Maven предоставляет полностью унифицированную и стандартизированную систему управления jar-пакетами.Вам нужно только зависеть от jar-пакета в проекте по координатам, и Maven автоматически скачает его с центрального склада на локальный склад
  • Разделить проект на несколько инженерных модулей
  • Сборка проекта (упаковка, компиляция и т. д.)

3. Несколько основных аспектов построения проекта:

  • clean: удалить предыдущие результаты компиляции при подготовке к перекомпиляции
  • Компиляция: компилировать исходные программы Java в файлы байт-кода.
  • Тест: проверьте ключевые моменты в проекте, чтобы убедиться в правильности ключевых моментов в итеративном процессе разработки проекта.
  • Отчетность: запись и отображение результатов теста в стандартном формате после каждого теста.
  • Пакет: инкапсулируйте проект, содержащий множество файлов, в сжатый файл для установки или развертывания. Java-проекты соответствуют jar-пакетам, а Web-проекты — war-пакетам.
  • Установка: в среде Maven это конкретно относится к установке результата упаковки — пакета jar или war-пакета в локальный репозиторий.
  • Развертывание: разверните упакованный результат на удаленном складе или разверните военный пакет на сервере для запуска.

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

  • mvn -version/-v- показать информацию о версии
  • mvn clean- Пустые сгенерированные файлы
  • mvn скомпилировать -- скомпилировать
  • mvn test - компилировать и тестировать
  • Пакет mvn — создание целевого каталога, компиляция, тестовый код, создание отчета о тестировании, создание файла jar/war
  • mvn site — веб-сайт, который генерирует информацию, связанную с проектом
  • mvn clean compile — указывает, что после запуска очистки и компиляции код будет скомпилирован в целевую папку.
  • mvn clean package - запустить чистую и упаковать
  • mvn clean install — запустите clean and install, установит упакованный пакет в локальный репозиторий, чтобы другие проекты могли вызывать
  • mvn clean deploy — запустить очистку и опубликовать

5. Основные концепции Maven

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

  • POM
  • Согласованная структура каталогов
  • координировать
  • управление зависимостями
  • управление складом
  • жизненный цикл
  • Плагины и цели
  • наследовать
  • полимеризация

В основной программе Maven определен только абстрактный жизненный цикл, а конкретные операции выполняются подключаемым модулем Maven.. Однако подключаемый модуль Maven не входит в основную программу Maven, и его необходимо загрузить из Интернета при первом использовании. Загруженный плагин будет сохранен в локальном репозитории. Расположение локального репозитория по умолчанию: ~.m2\repository.

5.1 Каталог проекта конвенции Maven:

maven-project.png

Общепринятое мнение в области разработки Java:Соглашение > Конфигурация > Кодирование(Проблемы, которые могут быть решены конфигурацией, не кодируются, а те, которые могут быть основаны на соглашениях, не настраиваются)

5.2. POM

Объектная модель проекта: Объектная модель проекта. Инкапсулируйте соответствующую информацию о проекте Java в виде объекта в качестве модели для упрощения работы и управления.

Основная конфигурация проекта Maven.

5.3 Координаты

  • Координаты Maven Используйте следующие три вектора для уникальной идентификации проекта Maven в репозитории Maven.
    • groupid: доменное имя компании или организации в обратном порядке + название текущего проекта
    • ArtifactId: имя модуля текущего проекта.
    • version: версия текущего модуля
  <groupId>net.lazyegg.maven</groupId>
  <artifactId>Hello</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  • Как найти упаковку баночки на складе по координатам?

    • объединить три вектора gav
    net.lazyegg.maven+Hello+0.0.1-SNAPSHOT
    
    • Используйте объединенную строку в качестве структуры каталогов для поиска на складе.

      net/lazyegg/maven/Hello/0.0.1-SNAPSHOT/Hello-0.0.1-SNAPSHOT.jar

※ Примечание. Перед входом на склад необходимо установить наш собственный проект Maven. Команда для установки:mvn install

5.4 Зависимости

Самая важная часть Maven, самая важная вещь, которую мы используем Maven, — это использование его функции управления зависимостями. Чтобы понять и освоить управление зависимостями Maven, нам нужно решить только следующие проблемы:

① Какова цель зависимости

Когда пакет jar A использует некоторые классы пакета jar B, A имеет зависимость от B, которая является концептуальным описанием. Итак, как внедрить нужный нам пакет jar в проект в качестве зависимости? Ответ очень прост, используйтеdependencyМетка указывает координаты зависимого пакета jar.

<dependency>
    <groupId>net.lazyegg.maven</groupId>
    <artifactId>Hello</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <scope>compile</scope>            
</dependency>
② Объем зависимостей

Иногда информация о зависимости имеет параметр области в дополнение к координатам целевого пакета jar, который является областью действия зависимости. Существует несколько необязательных значений для диапазона зависимостей, обычно используемые: компилировать, тестировать, предоставлять и, конечно, менее часто используемую среду выполнения, систему.

  • compile:Диапазон по умолчанию, допустимы как компиляция, так и тестовый запуск.

  • provided: действует при компиляции и тестировании

  • runtime: Действительно во время тестирования и во время выполнения

  • test: действительно только для тестирования

  • system: Действителен во время компиляции и тестирования, связан с собственными системами, плохая переносимость.

  • Общая сводка области действия зависимостей

compile test provided
основная программа ×
тестовая программа
Участвовать в развертывании × ×
③ транзитивность зависимостей

A зависит от B, B зависит от C, может ли A использовать C? Это зависит от того, компилируема ли область зависимости B от C, если да, то доступна, иначе недоступна.

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

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

<dependency>
    <groupId>net.lazyegg.maven</groupId>
    <artifactId>Hello</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <scope>compile</scope>
    <exclusions>
	<exclusion>
	<groupId>commons-logging</groupId>
	<artifactId>commons-logging</artifactId>
	</exclusion>
	</exclusions>
</dependency>
⑤ Единое управление версией jar-пакета, который от него зависит.Лучше использовать одну и ту же версию для группы jar-пакетов одного и того же фреймворка. Чтобы облегчить обновление платформы, информация о версии пакета jar может быть извлечена единообразно.
  • Номер версии единого заявления
<properties>
	<starfish.spring.version>4.1.1.RELEASE</starfish.spring.version>
	<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
  • Относится к ранее заявленному номеру версии
<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-core</artifactId>
	<version>${starfish.spring.version}</version>
	<scope>compile</scope>
</dependency>
⑥ Принцип зависимости: разрешить конфликты пакетов jar
  • Сначала кратчайший путь
  • Когда пути совпадают, тот, который объявлен первым, имеет приоритет.

Чувство боли в яйце, когда версии проекта конфликтуют, это знают только те, кто мучился, поэтому давайте посмотрим, как люди, которые мучились, решают это.Мы рекомендуем плагин IDEA, Maven Helper , который проще в использовании, чем встроенный, и с первого взгляда понятен

maven-helper.png

5.5 Склад

  • Классификация
    • Локальный репозиторий: обслуживать все проекты Maven на текущем локальном компьютере.
    • удаленный склад
      • PW: Настройка в текущей среде локальной сети, обслуживающая все проекты Maven в текущей локальной сети.
      • центральный склад: Настройка в Интернете, обслуживающая все проекты Maven в мире.
      • Зеркало центрального склада: настройка на разных континентах для совместного использования трафика центрального склада. Уменьшите нагрузку на центральный склад и быстрее отвечайте на запросы пользователей, например зеркало Али.
  • файлы в репозитории
    • Плагин Maven
    • Модули для собственных разработанных проектов
    • jar-пакеты сторонних фреймворков или инструментов ※ Независимо от того, какой пакет jar, структура каталогов создается в соответствии с координатами на складе, поэтому вы можете запросить или полагаться на него унифицированным способом и запросить адрес:mvnrepository.com/

5.6. Жизненный цикл

5.6.1 Что такое жизненный цикл Maven?

Жизненный цикл Maven определяет порядок выполнения каждой ссылки на сборку.С помощью этого списка Maven может автоматически выполнять команду сборки.

Maven имеет три независимых жизненных цикла, а именно:

  • Clean LifecycleСделайте некоторую очистку, прежде чем делать настоящую сборку
  • Default LifecycleОсновная часть сборки, компиляции, тестирования, упаковки, установки, развертывания и т. д.
  • Site LifecycleСоздавать отчеты по проектам, сайты, публиковать сайты

Они не зависят друг от друга, вы можете просто вызвать clean для очистки рабочего каталога и просто вызвать site для создания сайта. Конечно, вы также можете напрямую запуститьmvn clean install siteЗапустите все три набора жизненных циклов. Каждый жизненный цикл состоит из набора фаз (Phase), и команды, которые мы обычно вводим в командной строке, всегда соответствуют определенной фазе. Например, запустите mvn clean, что является фазой жизненного цикла Clean. Есть жизненный цикл очистки, а также фаза очистки.

5.6.2 Чистый жизненный цикл

Жизненный цикл Clean состоит из трех фаз:

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

5.6.3 Жизненный цикл сайта

  • pre-site выполняет некоторую работу, которую необходимо выполнить перед созданием документации сайта.
  • сайт генерирует документацию сайта для проекта
  • post-site выполняет некоторую работу, которую необходимо выполнить после создания документации сайта и подготавливает ее к развертыванию
  • site-deploy развертывает сгенерированные документы сайта на определенном сервере. Этап сайта и этап развертывания сайта часто используются здесь для создания и публикации сайтов Maven. Это очень мощная функция Maven. Менеджер предпочитает, документы и статистика генерируются автоматически и на них приятно смотреть.

5.6.4 Жизненный цикл по умолчанию

Жизненный цикл по умолчанию является наиболее важным в жизненном цикле Maven, и большая часть работы выполняется в этом жизненном цикле (перечислите некоторые важные этапы).

  • проверить: убедиться, что проект правильный и что все необходимые ресурсы доступны.
  • compile: Скомпилируйте исходный код проекта.
  • test: используйте подходящую среду модульного тестирования для проверки скомпилированного исходного кода. Эти тесты не нужно упаковывать и развертывать.
  • package: упаковать скомпилированный код в пригодный для выпуска формат, такой как jar, war и т. д.
  • Integration-test: обработайте и опубликуйте пакет в среде, поддерживающей интеграционное тестирование, если это необходимо.
  • Verify: Запускает все проверки, чтобы убедиться, что пакет действителен и соответствует стандартам качества.
  • install: установите пакет в локальный репозиторий maven, который может использоваться в качестве зависимости другими проектами.
  • развернуть: выполнить в интегрированной среде или среде выпуска, скопировать окончательную версию пакета в удаленный репозиторий, чтобы другие разработчики или проекты могли поделиться

5.6.5 Жизненный цикл и автоматизированные сборки

При запуске любого этапа будут запущены все этапы до него., например, когда мы запускаем mvn install, код будет скомпилирован, протестирован и упакован. Вот почему Maven может автоматизировать все аспекты процесса сборки. Кроме того, механизм подключаемых модулей Maven полностью зависит от жизненного цикла Maven, поэтому понимание жизненного цикла имеет решающее значение.

5.7 Плагины и цели

  • Ядро Maven определяет только абстрактный жизненный цикл, а все конкретные задачи выполняются подключаемым модулем.
  • Каждый подключаемый модуль может реализовывать несколько функций, и каждая функция является целью подключаемого модуля.
  • Жизненный цикл Maven и цели плагина связаны друг с другом для выполнения конкретной задачи сборки. Например: компиляция — это цель плагина maven-compiler-plugin, предварительная очистка — это цель плагина maven-clean-plugin.

5.8 Наследование

  • Зачем нужен механизм наследования? Поскольку информация о зависимостях, не связанных с компиляцией, не может быть передана в «цепочке зависимостей», проекты, которым она нужна, могут быть настроены только отдельно.
  • Создание родительского проекта Создание родительского проекта аналогично созданию общего проекта Java, единственное, что следует отметить, это то, что метод упаковки должен быть установлен на pom
  • Ссылка на родительский проект в дочернем проекте, относительный путь от текущего каталога до файла pom.xml родительского проекта.
 <parent>
 	<groupId>com.starfish.maven</groupId>
	<artifactId>Parent</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<!-- 以当前文件为基准的父工程pom.xml文件的相对路径 -->
	<relativePath>../Parent/pom.xml</relativePath>
</parent>

В это время, если groupId и версия подпроекта такие же, как у родительского проекта, их можно удалить.

  • Управление зависимостями в родительском проекте Используйте тег зависимостей в родительском проекте для использованияdependencyManagementтеги
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.9</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
</dependencyManagement> 

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

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
</dependency>

5.9. Агрегация

  • Зачем использовать агрегацию?

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

Как настроить агрегацию? Используйте комбинацию тегов modules/module в общем проекте агрегации и укажите относительный путь проекта модуля.

<!-- 配置聚合 -->
<modules>
    <!-- 指定各个子工程的相对路径 -->
    <module>starfish-learn-grpc</module>
    <module>starfish-learn-kafka</module>
    <module>starfish-web-demo</module>
</modules>