Рубрики
Без рубрики

чистая установка mvn – краткое руководство по Maven

Вы можете использовать это руководство, чтобы понять, что на самом деле делает “чистая установка mvn”. Также: Ускоренный курс по… Помеченный java, maven.

Вы можете использовать это руководство, чтобы понять, что на самом деле делает “чистая установка mvn”. Также: Ускоренный курс по Maven и обходным путям для его наиболее распространенных ошибок.

Что делает mvn clean install?

Короткий ответ

Apache Maven – популярный инструмент сборки, который берет исходный код Java вашего проекта, компилирует его, тестирует и преобразует в исполняемую Java-программу: файл .jar или .war.

mvn clean install – это команда для выполнения именно этого.

  1. Вы вызываете исполняемый файл mvn , что означает, что на вашем компьютере должен быть установлен Maven. (см. раздел_заголовок )

  2. Вы используете команду clean , которая удалит все ранее скомпилированные исходные тексты Java и ресурсы (например, .properties) в вашем проекте. Ваша сборка начнется с чистого листа.

  3. Install затем скомпилирует, протестирует и упакует ваш Java-проект и даже установит /скопируйте ваш встроенный файл .jar/.war в ваш локальный репозиторий Maven. (см. раздел_заголовок )

(Короткий) длинный ответ:

В Maven есть нечто большее, чем пара строк о “чистой установке mvn”. Если вы хотите узнать о том, как работает управление зависимостями и цикл сборки Maven, или как избежать наиболее распространенных ошибок при работе с ним: читайте дальше.

Maven: Ускоренный курс

Maven является одним из самых популярных инструментов сборки во вселенной Java (другие – Gradle или олдскульные Муравей ). С его помощью вы можете создавать не только Java-проекты, но и практически все проекты, написанные на языке JVM, таком как Kotlin или Scala , а также другие языки, такие как C# и Ruby.

Теперь, что точно делает инструмент сборки? Maven довольно хорошо делает три вещи:

  1. Управление зависимостями : Maven позволяет легко включать сторонние зависимости (например, библиотеки/фреймворки, такие как Spring) в ваш проект. Эквивалентом на других языках будет Javascript npm , Драгоценные камни Ruby или Композитор PHP .

  2. Компиляция с помощью конвенции : Теоретически вы могли бы скомпилировать большие Java-проекты с множеством классов вручную с помощью компилятора командной строки javac (или автоматизировать это с помощью скрипта bash). Однако это работает только для игрушечных проектов. Maven ожидает, что для вашего исходного кода Java будет создана определенная структура каталогов, и когда вы позже выполните чистую установку mvn , вся работа по компиляции и упаковке будет выполнена за вас.

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

Макет каталога Maven

Мавена pom.xml

Технически, любой каталог, содержащий pom.xml файл также является допустимым проектом Maven. А pom.xml файл содержит все необходимое для описания вашего Java-проекта. Давайте взглянем на минимальную версию:

    
    
        4.0.0

        com.marcobehler
        my-project 
        1.0-SNAPSHOT 

        
            1.8 
            1.8
            UTF-8
        

        
             
                junit
                junit
                4.12
                test
            
        
    
  1. Мы определяем проект под названием “мой проект”

  2. С номером версии 1.0-МОМЕНТАЛЬНЫЙ СНИМОК, т.е. незавершенная работа

  3. Использование Java 1.8 для компиляции

  4. С одной зависимостью, необходимой для модульного тестирования: junit в версии 4.12

Папки src и целевые папки Maven

Помимо pom.xml файл, вам также нужен исходный код Java для Maven, чтобы творить свое волшебство, всякий раз, когда вы вызываете mvn clean install . По соглашению:

  • Исходный код Java должен находиться в папке “/src/main/java”.

  • Maven поместит скомпилированные классы Java в папку “target/classes”

  • Maven также создаст файл .jar или .war, в зависимости от вашего проекта, который находится в папке “target”.

В итоге ваш проект будет выглядеть так:

    + myproject
        + -- src
            + -- main
                + -- java
                     MyApp.java
        + -- target
            + -- classes (upon mvn compile)
                 MyApp.class

            myproject.jar (upon mvn package or mvn install)

        pom.xml

Теперь, когда у вас есть pom.xml файл, а также папка src, вам все равно нужно, чтобы Maven был установлен на вашем компьютере. Давайте сделаем это сейчас.

Как вы устанавливаете Maven?

Установка Maven довольно проста. Подобно Java, это просто zip-файл, который вам нужно загрузить и поместить в любое место на вашем жестком диске. Содержимое zip-файла выглядит следующим образом:

    Directory c:\dev\apache-maven-3.6.1

    12.07.2019  09:25              .
    12.07.2019  09:25              ..
    12.07.2019  09:25              bin
    12.07.2019  09:25              boot
    12.07.2019  09:25              conf
    12.07.2019  09:25              lib
    12.07.2019  09:24            13.437 LICENSE
    12.07.2019  09:24               182 NOTICE
    12.07.2019  09:24             2.533 README.txt

Теперь вам нужно обязательно добавить каталог/bin в переменную PATH, иначе вы не сможете вызвать “mvn” (подумайте: mvn clean install) из любого места. Это оно.

Если вы не уверены в любом из этих двух шагов, на Youtube есть отличное видео , показывающее, как установить последнюю версию Maven 3.6 в Windows.

Взгляд на жизненный цикл сборки Maven: этапы

Теперь, что на самом деле происходит, когда вы выполняете чистую установку mvn в своем проекте? У Maven есть концепция жизненного цикла сборки, которая состоит из различных этапов.

Вот как выглядит жизненный цикл Maven по умолчанию (примечание: в нем отсутствует “чистый”).

Эти фазы последовательны и зависят друг от друга.

Пример :

Когда вы вызываете “mvn deploy”, mvn также будет выполнять каждую фазу жизненного цикла перед deploy в порядке: проверка, компиляция, тестирование, упаковка, проверка, установка .

То же самое для verify : проверка, компиляция, тестирование, упаковка . То же самое для всех остальных этапов.

И поскольку “clean” не является частью жизненного цикла Maven по умолчанию, вы получаете такие команды, как “mvn clean install” или “mvn clean package”. ‘ Установка” или “пакет” запустят все предыдущие этапы, но вам необходимо дополнительно указать clean.

Где Maven хранит сторонние библиотеки?

В отличие от других языков, где зависимости проекта хранятся в каталоге вашего проекта, в Maven существует концепция репозиториев.

Существуют локальные репозитории (в домашнем каталоге вашего пользователя: ~/.m2/) и удаленные репозитории. Удаленные репозитории могут быть внутренними, общекорпоративными репозиториями, такими как Артефактор или Нексус или (эталонное) глобальное хранилище в https://repo.maven.apache.org/maven2/ .

Maven будет всегда загружать зависимости вашего проекта в ваш локальный репозиторий maven первый и затем ссылайтесь на них для вашей сборки. Когда вы вспоминаете о своем pom.xml файл из прошлого:

        
            
                junit
                junit
                4.12
                test
            
        

Затем mvn, как только вы попытаетесь “протестировать mvn” свой проект, загрузит зависимость junit в ~/.m2/repository/junit/junit/4.12/junit-4.12.jar и ссылаться на него через Механизм пути к классам Java для вашей сборки.

Для получения дополнительной информации об использовании репозиториев см. официальную документацию по адресу https://maven.apache.org/guides/introduction/introduction-to-repositories.html .

Общие вопросы Maven

Где я могу найти координаты Maven для любой сторонней библиотеки?

Популярными сайтами являются https://mvnrepository.com/ или https://search.maven.org/ . Вы можете найти другие в этой теме на Stackoverflow .

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

Если вы следовали руководству, то к настоящему времени это должно быть довольно ясно.

  • очистить : удаляет целевую папку/. Итак, один и тот же результат для обеих команд.

  • посылка : Преобразует ваш исходный код .java в файл .jar/.war и помещает его в папку/target.

  • устанавливать : Во-первых, он делает пакет (!). Затем он берет этот файл .jar/.war и помещает его в ваш локальный репозиторий Maven, который находится в ~/.m2/репозитории.

Зачем мне вообще нужно вызывать “чистый”? Разве установки mvn не будет достаточно?

Теоретически, вызова “mvn install” было бы достаточно, если бы Maven был достаточно умен, чтобы выполнять надежные инкрементные сборки. Это означает выяснить, какие исходные файлы/модули Java изменились, и скомпилировать только их.

До Maven 3.1 инкрементная компиляция практически отсутствовала, и даже с последними версиями плагинов Maven и компилятора в поддержке инкрементной компиляции есть ошибки и проблемы с документацией.

Следовательно, разработчики привыкли всегда вызывать “mvn clean install” (хотя это значительно увеличивает время сборки в более крупных проектах).

Mvn clean install не создает родственные проекты

К сожалению, это то, что происходит в многомодульных проектах, и другие инструменты сборки, такие как, например, Gradle, не имеют с этим проблем. Представьте, что ваша сборка Maven выглядит так:

    + stocks-broker-app (parent)
        + stocks-data-module
        + stocks-rest-module (depends on stock-data)
        + stocks-ui-module (depends on stock-data)

и вы делаете следующее:

    cd stocks-ui-module
    mvn clean install  // or another appropriate goal

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

Однако есть обходной путь. Вам не всегда нужно создавать весь родительский проект целиком, вместо этого вы можете указать список подмодулей для сборки и выполнить зависимую сборку. В нашем случае это будет выглядеть так:

    cd ..  // so you are in the parent project
    mvn -pl stocks-ui-module -am clean install  // or another appropriate goal
  • -pl позволяет указать подмодули для сборки

  • -am означает также make , который также будет создавать зависимые модули

Mvn очищает зависимости от установки и моментального снимка

Иногда, если ваш проект зависит от зависимостей МОМЕНТАЛЬНЫХ снимков, Maven не обновит ваш локальный репозиторий Maven до самой последней версии моментального снимка.

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

mvn -U clean install

Что такое mwnw?

Некоторые проекты поставляются с исполняемым файлом mwnw, который не обозначает Maven (в) Windows, а скорее Maven оболочку .

Это означает, что вам не обязательно устанавливать mvn на вашем компьютере для создания вашего проекта – скорее, mvn встроен в каталог вашего проекта, и вы можете вызвать его с помощью исполняемого файла mvnw.

Узнайте больше о оболочке Maven здесь .

Плавник

Это руководство представляет собой лишь краткий обзор того, что Maven может сделать для вас и как обойти его наиболее распространенные ошибки. Если вам нужны более подробные объяснения, ознакомьтесь с курсом Mastering Maven .

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

Там, Откуда Это Взялось, Есть Еще Кое-Что

Эта статья первоначально появилась на www.marcobehler.com/written как часть серии руководств по современному программированию на Java. Чтобы найти больше руководств, посетите веб-сайт или подпишитесь на рассылку новостей, чтобы получать уведомления о новых опубликованных руководствах: https://bit.ly/2K0Ao4F .

Спасибо за чтение.

Оригинал: “https://dev.to/marcobehler/mvn-clean-install-a-short-guide-to-maven-39e7”