1. Список фаз проєкту
Нарешті ми дісталися до складання проєкту. І тут на тебе чекає невеликий сюрприз: Maven переглянув підхід до збирання проєкту. Зараз ти в цьому переконаєшся.
Складання проєкту було розділене на фази, опис яких я наведу в таблиці нижче:
| Order | Фаза | |
|---|---|---|
| 1 | validate | перевіряє коректність метаінформації щодо проєкту |
| 2 | compile | компілює вихідні файли |
| 3 | test | проганяє тести класів із попереднього кроку |
| 4 | package | пакує скомпільовані класи в новий артефакт: jar, war, zip, … |
| 5 | verify | перевіряє коректність артефакту та дотримання вимог до якості |
| 6 | install | кладе артефакт до локального репозиторію |
| 7 | deploy | заливає артефакт на production-сервер або віддалений репозиторій |
Водночас кроки чітко послідовні. Якщо ти скажеш Maven'у виконати команду package, він перед цим виконає фази validate, compile, test, і вже потім – package
У принципі нічого нового тут немає, хіба що з'явилися окремі фази контролю якості: validate, test, verify. І аж дві фази для деплою складання – install та deploy.
Щоб запустити певну фазу, достатньо написати команду maven phase. Наприклад, для складання потрібно виконати команду maven package, тощо.
Intellij IDEA чудово вміє працювати з цими фазами, і в неї праворуч є спеціальне меню для цих цілей:
Тут, окрім відомих фаз, IDEA відображає ще дві команди: clean та site. clean використовується для того, щоб повністю очистити папку target, а site вміє створювати документацію проєкту.
2. Складання проєкту
Якщо ти хочеш скомпілювати проект, потрібно запустити фазу compile. Це можна зробити за допомогою командного рядка – mvn compile – або через інтерфейс IDEA, натиснувши на compile.
Після цього Maven запустить складання проєкту, і ти побачиш лог процесу складання типу такого:
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.742 s
[INFO] Finished at: 2016-09-19T22:41:26+04:00
[INFO] Final Memory: 7M/18M
[INFO] ------------------------------------------------------------------------
Якщо щось пішло не так, лог буде типу такого:
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.0:compile (default-compile) on project demo: Fatal error compiling: invalid target release: 11 -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1]
http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException
У лозі буде купа корисної інформації, і згодом ти навчишся її розуміти та цінувати.
3. Цикли роботи
Усі команди maven поділяються на три групи – lifecycles. Їх називають життєвими циклами, оскільки вони встановлюють порядок фаз, які виконуються під час складання або певного життєвого циклу, тому що не всі дії Maven є складанням.
Загалом життєвих циклів три:
- clean;
- default;
- site.
Кожен із них має свій порядок фаз. У clean він найкоротший:
- pre-clean;
- clean;
- post-clean.
Було додано приховані додаткові фази pre-clean та post-clean, щоб сценарій очищення можна було зробити більш гнучким.
Потім йде життєвий цикл site, який, як ти вже знаєш, призначений для автоматичної генерації документації проєкту. Він складається з чотирьох фаз:
- pre-site
- site;
- post-site;
- Site-Deploy.
Стандартні життєві цикли можна доповнити функціоналом за допомогою Maven-плагінів. Про це розповімо пізніше, адже це дуже цікава тема, яка заслуговує на окрему лекцію.
Найдовший список фаз – у сценарію default:
- validate;
- generate-sources;
- process-sources;
- generate-resources;
- process-resources;
- compile;
- process-test-sources;
- process-test-resources;
- test-compile;
- test;
- package;
- install;
- deploy.
Тут є ті самі фази, які тобі вже відомі, але додалося ще кілька необов'язкових.
По-перше, популярний у великих проєктах етап generate-sources: генерація Java-коду на основі, скажімо, XML. І парний йому process-sources, який щось із цим кодом робить.
По-друге, генерація ресурсів – generate-resources та парний йому метод process resources. Ти часто бачитимеш певні дії, прив'язані до цих фаз у великих проєктах.
І нарешті – тестування. Воно має три додаткові необов'язкові фази, які допомагають зробити запуск фази тестування максимально гнучким: process-test-sources, process-test-resources, test-compile.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ