Maven Flashcards
Bild
сборка файла двоичного кода
Автоматизация Bild
- компиляция в бинарник
- билд
- тесты
- деплой на продакшене
- генерация сопроводительной документации
Maven что такое
фреймворк для автоматизации сборки, компиляции, создания jar, создание дистибутива, создание документации, генерации отчетов, управления зависимостями, релизами.
Если собирать большие проекты с командной строки - то строка будет очень большой - используют bat/sh скрипты. НО они зависят то платформы. Поэтому сделал Maven. Описание сборки через pom.xml.
недостатки Maven
Порог входа по знаниям высокий, нужен интернет либо свой репозиторий.
Как узнать версию maven
mvn –version
Основная структура каталогов Maven
pom.xml
src(main(java, resources,filters),test)
target/
Где хранятся файлы классов при компиляции проектов
../target/classes
pom.xml
содержит задачи и плагины в хранится вся информация
superpom.xml
родительский pom.xml
Минимальный помник
4.0.0
ru.ursip.webservice.machine
machine
1.0.0-SNAPSHOT
dependences
библиотек необходимые проекту
plugin
зависимость мавена, расширяющая функционал
goal
задачи, могут быть привязаны к нескольким фазам
archetype
нестандартная копоновка файлов и каталогов
repository
глобальное хранилище библиотек, jar, pom,javadoc
local - /.m2/repository
central - http://repol.maven.org/maven2/
remote - определяется разработчиком
собрать jar
mvn install
порядок поиска зависимостей
сначала локальный репозиторий
затем глобальный
и если указан удаленный - то в нем
LIfeCircle сборки
последовательность фаз сборки
- clean
- build
- site //генерирует документацию
какой командой создать веб сайт проекта
mvn site
mvn clean
очищает директорию от созданных в процессе сборки файлов
Из каких этапов состоит lifecircle clean
pre-clean
clean
post-clean
lifeCircle build
validate - корректность метаинформации о проекте
initialize - инициализирует состояние сборки
generate-sources - включает код в фазу компиляции
process-sources подготавливает исходный код
generate-resources - генерирует ресурсы в директори
compile - компилирует код
process-calsses обработка файлов полученных от компиляции(оптимизация байт-кода)
генерирует ресурсы для тестов
обрабатывает исходники тестов
компилирует их
запускает тесты
упаковывает сборку
интеграционные тесты
верификация пакета
размещение пакета в локальном репозитории
deploy - копирование пакета в удаленный репозиторий
Что сделает команда mvn clean dependency:copy-dependencies package
сначала выполнится clean, затем задача dependency:copy-dependencies и затем package
Профиль сборки
Профиль настроек для сборки проекта, настраиваются в pom.xml с помощью элементов activeProfiles / profiles
профиль сборки юзера настраивается в %USER_HOME%/.m2/settings.xml
глобальный профиль сборки в
%M2_home%/conf/settings.xml
Зачем плагины
для создания jar, war, компиляция кода файлов, Юнит-тесты, Отчеты проектов, генерация Документации
бывают плагины сборки (конфигурируются в ), а бывают для генерации сайта(тогда конфигурируются в )
Когда Maven использует внешние зависимости?
Если зависимости не найдены ни в локально, ни в центральном репозитории.
Как определить внешние зависимости
в pom.xml groupId как имя файла artifactId как имя файла Определить область видимости зависимости, как System указать абсолютный путь к файлу
Как создать новый проект на основе архетипа
archetype:gererate
SNAPSHOT
рабочая под-версия сборки, при каждой сборке мавен проверяет новую версию на удаленном репозитории
а в чем разница между SNAPSHOT И версией???
ПОлучив исходник с версией 1.0 MAVEN не будет пытаться получить новую версию….но будет проверять и подгружать новые версии SANPSHOT
Транзитивная зависимость
Автоматическая подгрузка библиотек в проект по самому короткому пути из списка зависимых
проектов
Какую версию зависимости Maven выберет, когда вариантов несколько
Dependency mediation - определяет это, если в дереве зависимостей зависимости находятся на одном уровне, то выберется та, которая была обновлена первой
dependency scope
области видимости зависимости:
compile - во всех classpath проекта
provided - compilation и test classpath
runtime - эта область указывает на то, что зависимость не обязательна для compilation, но обязательна для фаз выполнения
test - зависимость не обязательная для нормального исполнения
system - эта область похожа на provided за исключением того, что вы предоставляете jar. Артефакт всегда доступен и не смотрит в репозиторий
import - эта область используется в зависимости типа POM в разделе. Это указывает на то, что определенный POM будет заменен зависимостями в этом POM разделе
как сослаться на свойство (property) опредленное в pom.xml
На все свойста pom.xml, можно сослаться с помощью префиксов “project” или “pom”. Например:
${project.build.directory} - targer директория
${project.build.outputDirectory} - путь куда компилятор складывает файоы по умолчанию “target/classes”
${project.name} - имя проекта
зачем
содержит информацию для выполнеиня плагина
как исключить зависимость в Maven
exclusion
Что я вляется полным именем артефакта
: :
Можно ли собрать проект MAVEN без интернета
Да, если в локальном репозитории есть все необходимые для сборки артефакты
как исключить тесты при сборке
mvn install -Dmaven.test.skip=true
как запустить только один тест
mvn install -Dtest=org.apache.maven.utils.ConverterTest
Как остановить наследование плагинов для дочерних Pom
установить в false
определяет какой тип сборки: pom, Jar, war, ear