18
Ноя
2019

Что такое Maven, и где он обитает?

Мавен – это фреймворк автоматической сборки проектов с широким функционалом – достаточно широким, чтобы неподготовленный разработчик, зашедший в эти дебри, заработал головную боль, сломал себе проект и ногу, а то и обе. Сегодня мы попробуем буквально за 10 минут освоить главные фишки мавен : управление зависимостями, в том числе транзитивными, и автоматическую сборку. Если вдруг вы не знакомы с понятием транзитивных зависимостей, это цепочка A ← B ← C, где A зависит от В, а В от С. Maven позволяет не запариваться по этому поводу, и если вам нужен именно А, указывать только его, об остальном позаботится за вас.

Я предполагаю, что у вас уже установлена java, если нет, то срочно это исправьте. Maven использует декларативный подход, где все инструкции записываются на языке разметки POM – обычном XML с рядом предопределенных сущностей. В данной статье примеры будут достаточно просты, так что курсы XML пока можно отложить.

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

Все современные IDE позволяют создать проект maven буквально двумя кликами, но мы не станем срезать путь. Для создания простейшей директории запустите в консоли команду:

            mvn -B archetype:generate -DarchetypeGroupId=org.apache.maven.archetypes -DgroupId=com.mycompany.app -DartifactId=test-app 
        

Мы создали классический "Hello, world", разберём его в деталях. Первое, во что мы упираемся, – это archetype, так в Maven называются шаблоны. Команда archetype:generate создает проект по архетипу. В нашем случае id по умолчанию приравнивается к 15 или maven-archetype-quickstart.

Чтобы задать шаблон, просто добавьте в команду

            -DarchetypeArtifactId=maven-archetype-quickstart 
        

Полный список доступных шаблонов можно посмотреть на сайте или отдельно в консоли вбить mvn archetype:generate. Следом идет archetypeGroupId – что-то вроде пространства имён шаблонов. GroupId – обычно используется для указания производителя. Artifac – это название нашего проекта. Собственно, артефакты – это главная сущность в Maven, из них состоит всё.

На выходе получаем такую структуру:

            test-app
|-- pom.xml
`-- src
    |-- main
    |   `-- java
    |       `-- com
    |           `-- mycompany
    |               `-- app
    |                   `-- App.java
    `-- test
        `-- java
            `-- com
                `-- mycompany
                    `-- app
                        `-- AppTest.java 
        

В корне видим сгенерированный файл 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>test-app</artifactId>
  <version>1.0-SNAPSHOT</version>
 
  <properties>
    <maven.compiler.source>1.7</maven.compiler.source>
    <maven.compiler.target>1.7</maven.compiler.target>
  </properties>
 
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project> 
        

Большая часть этого файла сгенерирована и не нуждается в корректировке на стартовом этапе, кроме тега dependencies, именно здесь нужно будет объявлять зависимоcти, каждую в отдельном теге dependency. Сейчас там указана только библиотека для тестирования junit.

Важные тонкости

Напоследок хочу обратить внимание на несколько пунктов. По умолчанию Maven работает с java 1.6, чтобы это поправить, нужно внутри тега project добавить следующий код, заменив {Ваша версия java} на соответствующий номер.

            <properties>
        <maven.compiler.release>{Ваша версия java}</maven.compiler.release>
    </properties>
 
    <build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.8.1</version>
                </plugin>
            </plugins>
        </pluginManagement>
    </build> 
        

Поздравляю, проделанной работы достаточно, чтобы прописать команду сборки:

            mvn package 
        

Фреймврок автоматически пройдет цепочку из 6 этапов, и теперь остается только запустить:

            java -cp target/test-app-1.0-SNAPSHOT.jar com.mycompany.app.App 
        

Наслаждаемся результатом трудов! =)

Этого должно быть достаточно для базового понимания Maven. Если вы загорелись идеей освоить этот инструмент и использовать весь его функционал, стоит начать с детального изучения super POM, шаблонов и плагинов. Удачи вам в освоении новых рубежей ;)

Share

Тебе может это понравится...