Maven – это программа фреймворк для автоматической сборки проектов с обширным функционалом. Функционал настолько большой, что изучить его весь и сразу не представляется возможным для большинства программистов. Для наших целей достаточно изучить сами основы работы с Maven.Если в работе понадобится что то большее, то можно всегда изучить дополнительные возможности Maven. Maven позволяет добавить в проект любые библиотеки и связанные с ними дополнительные библиотеки буквально тремя строчками кода. Maven сделает за вас автоматическую сборку вашего проекта. Maven создаст за вас большинство файлов и папок вашего проекта в общепринятой структуре. Согласно выбранному вами типу проекта. Maven позволяет подключить огромное количество плагинов для работы с вашим кодом. Например плагин обфускации кода.
Все настройки будут содержаться в xml файле POM:
<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>2.2.2</modelVersion> <groupId>ru.javaforall.application</groupId> <artifactId>my-application</artifactId> <version>1.0</version> <packaging>jar</packaging> <name>Maven Quick Start Archetype</name> <url>http://maven.apache.org</url> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.8.2</version> <scope>test</scope> </dependency> </dependencies> </project>
POM файл имеет несколько секций: Корневой элемент <project> основное тело файла POM. В нем содержится описание проекта в виде:
<groupId>ru.javaforall.application</groupId> // <artifactId>my-application</artifactId> // <version>1.0</version> //
Где: groupId - наименование организации или доменное имя сайта проекта. artifactId - название проекта version-версия проекта Если проект в доработке, то к номеру version добавляется SNAPSHOT. <packaging> определяет какого типа файл будет создан в результате сборки. Возможны такие: pom, jar, war, ear. Тэг необязателен.Если не прописан,то используется значение по умолчанию - jar. Можно добавить любые описания проекта, которые будут понятны программисту, но сам Maven не будет ими пользоваться. Например:
<name>HelloWorld!!!</name> название проекта,удобное для пользователя <description>Nhis is first program java</description> Описание проекта <url>www.javaforall.ru</url> сайт проекта <tel>8-928...-21-34</tel> телефон разработчика <requirements>windows10</requirements> требования программы <beloved_cat>kot-zadrot</beloved_cat> любимый кот разработчика и т.д.
<dependensies> - это секция со списком зависимостей.Зависимость-это просто напросто подключаемая сторонняя библиотека или плагин, которые необходимы для вашего проекта. Каждая библиотека идентифицируется своими groupId, artifactId, version. Объявление зависимостей производится между тэгами <dependencies>...</dependencies>. При этом каждая зависимость прописывается отдельно.Необходимые идентификаторы библиотек можно узнать в хранилище библиотек и плагинов maven. Зависимость можно прописать с тэгом <scope>. Он указывает в каком этапе работы с проектом будет использована описываемая библиотека. задаёт, для чего библиотека используется.В нашем примере подключается библиотека тестирования кода и запускаться тесты будут только на этапе test.
<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.8.2</version> <scope>test</scope> </dependency> </dependencies>
добавим библиотеку guava
<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.8.2</version> <scope>test</scope> </dependency> <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>28.2-jre</version> </dependency> </dependencies>
<build> необязательная секция, так как существуют значения по умолчанию.Содержит информацию по самой сборке: где находятся исходные файлы, где находятся ресурсы, какие плагины используются и т. д.
<build> <sourceDirectory>src</sourceDirectory> <resources> <resource> <directory>resources</directory> </resource> </resources> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>2.0.2</version> <configuration> <source>1.8</source> <target>1.8</target> <encoding>UTF-8</encoding> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-checkstyle-plugin</artifactId> <version>2.17</version> <configuration> <suppressionsLocation>suppressions.xml</suppressionsLocation> </configuration> </plugin> </plugins> </build>
<sourceDirectory> - определяет, откуда Maven будет брать файлы исходного кода. По умолчанию это src/main/java, но вы можете определить, где это вам удобно. <resources> и вложенные в неё тэги <resource> определяют, одну или несколько директорий, где хранятся файлы ресурсов. Ресурсы в отличие от файлов исходного кода при сборке просто копируются. Директория по умолчанию src/main/resources. <outputDirectory> - определяет, в какую директорию компилятор будет сохранять результаты компиляции - *.class файлы. Значение по умолчанию - target/classes. <finalName> - имя результирующего jar (war, ear ...) файла с соответствующим типу расширением. Значение по умолчанию — artifactId-version.
<properties> в этой секции указываются некоторые системные значения, необходимые для сборки и работы вашего проекта. Так же рекомендуется вставлять эти три строки:
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties> жестко задается кодировка проекта и задается необходимая версия jdk
Необходимо упомянуть что Maven создает проект с такой структурой, которая будет задана в archetype. Archetype выбирается на этапе создания проекта maven.
Этой информации достаточно чтобы покрыть 80% необходимых знаний по настройке проекта Maven. Если понадобится что то специфическое, то можно обратиться к подробной документации по maven