Где хранятся файлы проекта, скомпилированные maven

Обновлено: 05.07.2024

В этом руководстве рассказывается, как использовать Maven для создания простого проекта Java.

Что вы будете строить

Вы создадите приложение, которое предоставляет информацию о времени суток, а затем создадите его с помощью Maven.

Что вам понадобится

Около 15 минут

Любимый текстовый редактор или IDE

Как заполнить это руководство

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

Чтобы начать с нуля, перейдите к настройке проекта.

Чтобы пропустить основы, сделайте следующее:

перейдите в gs-maven/initial

Когда вы закончите, вы можете сравнить свои результаты с кодом в gs-maven/complete .

Настроить проект

Сначала вам нужно настроить проект Java для сборки Maven. Чтобы сосредоточиться на Maven, сделайте проект максимально простым. Создайте эту структуру в папке проекта по вашему выбору.

Создайте структуру каталогов

В выбранном вами каталоге проекта создайте следующую структуру подкаталогов; например, с помощью mkdir -p src/main/java/hello в системах *nix:

В каталоге src/main/java/hello вы можете создавать любые классы Java по своему усмотрению. Чтобы сохранить согласованность с остальной частью этого руководства, создайте эти два класса: HelloWorld.java и Greeter.java .

Теперь, когда у вас есть проект, готовый к сборке с помощью Maven, следующим шагом будет установка Maven.

Загрузив zip-файл, разархивируйте его на свой компьютер. Затем добавьте к пути папку bin.

Чтобы протестировать установку Maven, запустите mvn из командной строки:

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

Поздравляем! Теперь у вас установлен Maven.

ИНФОРМАЦИЯ. Возможно, вы захотите использовать оболочку Maven, чтобы оградить ваших разработчиков от использования правильной версии Maven или необходимости ее установки вообще. Проекты, загруженные из Spring Initializr, имеют включенную оболочку. Он отображается как скрипт mvnw на верхнем уровне вашего проекта, который вы запускаете вместо mvn .

Определить простую сборку Maven

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

Создайте файл с именем pom.xml в корне проекта (т. е. поместите его рядом с папкой src) и задайте ему следующее содержимое:

За исключением необязательного элемента, это самый простой файл pom.xml, необходимый для создания проекта Java. Он включает следующие сведения о конфигурации проекта:

<р> . Версия модели POM (всегда 4.0.0).

<р> . Группа или организация, которой принадлежит проект. Часто выражается как перевернутое доменное имя.

<р> . Имя, которое будет присвоено библиотечному артефакту проекта (например, имя его JAR- или WAR-файла).

<р> . Версия строящегося проекта.

— Как должен быть упакован проект. По умолчанию используется "jar" для упаковки файла JAR. Используйте "war" для упаковки файлов WAR.

Когда дело доходит до выбора схемы управления версиями, Spring рекомендует семантический подход к управлению версиями.

На данный момент у вас есть минимальный, но работоспособный проект Maven.

Создать код Java

Теперь Maven готов к сборке проекта. Теперь с помощью Maven вы можете выполнять несколько целей жизненного цикла сборки, включая цели по компиляции кода проекта, созданию пакета библиотеки (например, файла JAR) и установке библиотеки в локальном репозитории зависимостей Maven.

Чтобы опробовать сборку, введите в командной строке следующее:

Это запустит Maven, сообщая ему о выполнении цели compile. По завершении вы должны найти скомпилированные файлы .class в каталоге target/classes.

Поскольку маловероятно, что вы захотите распространять файлы .class или работать с ними напрямую, вместо этого вы, вероятно, захотите запустить цель package:

Цель package скомпилирует ваш код Java, запустит все тесты и закончит, упаковав код в файл JAR в каталоге target. Имя файла JAR будет основано на файлах проекта и . Например, учитывая минимальный файл pom.xml из предыдущего файла, файл JAR будет называться gs-maven-0.1.0.jar.

Чтобы выполнить запуск файла JAR:

Если вы изменили значение с "jar" на "war", результатом будет файл WAR в каталоге target, а не JAR-файл.

Maven также поддерживает репозиторий зависимостей на вашем локальном компьютере (обычно в каталоге .m2/repository в вашем домашнем каталоге) для быстрого доступа к зависимостям проекта. Если вы хотите установить JAR-файл вашего проекта в этот локальный репозиторий, вам следует вызвать цель установки:

Цель install скомпилирует, протестирует и упакует код вашего проекта, а затем скопирует его в локальный репозиторий зависимостей, готовый для того, чтобы другой проект мог сослаться на него как на зависимость.

Говоря о зависимостях, пришло время объявить зависимости в сборке Maven.

Объявить зависимости

Простой пример Hello World полностью автономен и не зависит от каких-либо дополнительных библиотек. Однако большинство приложений зависят от внешних библиотек для обработки общих и сложных функций.

Например, предположим, что помимо фразы "Hello World!" вы хотите, чтобы приложение печатало текущую дату и время. Хотя вы можете использовать средства даты и времени в собственных библиотеках Java, вы можете сделать вещи более интересными, используя библиотеки времени Joda.

Сначала измените HelloWorld.java следующим образом:

Здесь HelloWorld использует класс LocalTime из Joda Time для получения и вывода текущего времени.

Если бы вы сейчас запустили mvn compile для сборки проекта, сборка завершилась бы ошибкой, потому что вы не объявили Joda Time в качестве зависимости компиляции в сборке. Это можно исправить, добавив следующие строки в pom.xml (внутри элемента):

Этот блок XML объявляет список зависимостей для проекта. В частности, он объявляет одну зависимость для библиотеки Joda Time. Внутри элемента координаты зависимостей определяются тремя подэлементами:

— группа или организация, к которой принадлежит зависимость.

— необходимая библиотека.

 – конкретная требуемая версия библиотеки.

По умолчанию все зависимости рассматриваются как зависимости компиляции. То есть они должны быть доступны во время компиляции (и если вы собирали файл WAR, в том числе в папке /WEB-INF/libs файла WAR). Кроме того, вы можете указать элемент для указания одной из следующих областей действия:

provided — зависимости, которые необходимы для компиляции кода проекта, но которые будут предоставлены во время выполнения контейнером, выполняющим код (например, Java Servlet API).

test — зависимости, которые используются для компиляции и запуска тестов, но не требуются для сборки или запуска исполняемого кода проекта.

Теперь, если вы запустите mvn compile или mvn package , Maven должен разрешить зависимость Joda Time от репозитория Maven Central, и сборка пройдет успешно.

Написать тест

Сначала добавьте JUnit в качестве зависимости к файлу pom.xml в области проверки:

Затем создайте тестовый пример следующим образом:

Maven использует подключаемый модуль "surefire" для запуска модульных тестов. Конфигурация по умолчанию этого плагина компилирует и запускает все классы в src/test/java с именем, совпадающим с *Test . Вы можете запускать тесты в командной строке следующим образом

или просто используйте шаг установки mvn, как мы уже показали выше (существует определение жизненного цикла, в котором "тест" включен как этап "установки").

Вот готовый файл pom.xml:

Завершенный файл pom.xml использует подключаемый модуль Maven Shade для простого удобства создания исполняемого файла JAR. Основное внимание в этом руководстве уделяется началу работы с Maven, а не использованию этого конкретного подключаемого модуля.

Обзор

Поздравляем! Вы создали простое, но эффективное определение проекта Maven для создания проектов Java.

См. также

Также могут быть полезны следующие руководства:

Хотите написать новое руководство или внести свой вклад в уже существующее? Ознакомьтесь с нашими рекомендациями по взносам.

Получить код

Оглавление

Двигаться вперед

VMware предлагает обучение и сертификацию, чтобы ускорить ваш прогресс.

Получить поддержку

Spring Runtime предлагает поддержку и двоичные файлы для OpenJDK™, Spring и Apache Tomcat® в рамках одной простой подписки.

Предстоящие события

Ознакомьтесь со всеми предстоящими событиями в сообществе Spring.

Получить весенний информационный бюллетень

Спасибо!

Я просто пытаюсь выяснить, что происходит, когда выполняется команда mvn install или mvn compile. Меня в основном интересует, как строится проект, например, расположение ресурсов, которые нужно выбрать для сборки, и куда их поместить после сборки

Исходная структура моего проекта

Как только я передаю mvn package или mvn clean, я вижу ниже разобранный каталог (мое внимание сосредоточено на этом) с именем myProject вместе с другими файлами, такими как война, классы и т. д. Explode структура для myProject

Насколько я понимаю, когда мы даем mvn install или mvn compile или mvn package, выполняются все фазы компиляции. Но мой вопрос в том, как Maven знает, куда поместить исходный файл в взорванном каталоге. Это стандартный maven следует?

Вот фрагмент для справки из pom.xml, который я использую

1 Ответ 1

Maven следует стандарту Java, когда помещает скомпилированные файлы в WEB-INF/classes.

Этот каталог содержит серверные классы: сервлеты, служебные классы и компоненты JavaBeans. Эти классы видны только сервлету и не являются общедоступными.

10.5 Структура каталогов

В иерархии приложений существует специальный каталог с именем «WEB-INF». Этот каталог содержит все, что связано с приложением, но не находится в корне документа приложения. Большая часть узла WEB-INF не является частью общедоступного дерева документов приложения. За исключением статических ресурсов и JSP, упакованных в META-INF/resources файла JAR, который находится в каталоге WEB-INF/lib, никакие другие файлы, содержащиеся в каталоге WEB-INF, не могут быть предоставлены клиенту напрямую контейнер. Однако содержимое каталога WEB-INF видно коду сервлета с помощью вызовов методов getResource и getResourceAsStream в ServletContext и может быть раскрыто с помощью вызовов RequestDispatcher. Следовательно, если разработчику приложений требуется доступ из кода сервлета к конкретной информации о конфигурации приложения, которую он не хочет предоставлять непосредственно веб-клиенту, он может поместить ее в этот каталог.

Сайт Apache Maven


    //
  • Введение в стандартный макет каталога
  • | Последняя публикация: 27 марта 2022 г.
  • | Получить исходники

Введение в стандартный макет каталога

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

В следующем разделе описывается макет каталога, ожидаемый Maven, и макет каталога, созданный Maven. Постарайтесь максимально соответствовать этой структуре. Однако, если вы не можете, эти настройки можно переопределить с помощью дескриптора проекта.

Все руководства выпускаются с лицензией ASLv2 на код и лицензией Creative Commons Attribution, NoDerivatives на написание.
src/main/java Исходники приложения/библиотеки
src/main/resources Ресурсы приложения/библиотеки
src/main/filters Файлы фильтров ресурсов
src/main/webapp Исходники веб-приложений
src/test/java Исходники тестов< /td>
src/test/resources Ресурсы для тестирования
src/test/filters Файлы фильтров тестовых ресурсов
src/it< /td> Интеграционные тесты (в основном для подключаемых модулей)
src/assembly Дескрипторы сборки
источник/сайт Сайт
ЛИЦЕНЗИЯ.txt Лицензия проекта
NOTICE.txt Уведомления и атрибуты, требуемые библиотеками, от которых зависит проект
README.txt файл сведений о проекте

На верхнем уровне файлы с описанием проекта: файл pom.xml. Кроме того, существуют текстовые документы, предназначенные для чтения пользователем сразу после получения источника: README.txt , LICENSE.txt и т. д.

Целевой каталог используется для размещения всех выходных данных сборки.

Каталог src содержит все исходные материалы для создания проекта, его сайта и так далее. Он содержит подкаталог для каждого типа: main для основного артефакта сборки, test для кода и ресурсов модульного теста, site и т. д.

В артефактах, создающих исходные каталоги (например, main и test ), есть один каталог для языка java (в котором существует обычная иерархия пакетов) и один для ресурсов (структура, которая копируется в целевой путь к классам с учетом определение ресурса по умолчанию).

Если в сборке артефакта есть другие источники, они должны находиться в других подкаталогах. Например, src/main/antlr будет содержать файлы определения грамматики Antlr.

Apache Maven – это мощное средство сборки, предназначенное в первую очередь для программных проектов Java. Он реализован на Java, что делает его независимым от платформы.

Инструменты сборки выполняют компиляцию, тестирование, упаковку и развертывание конечного продукта. Преимущество автоматического выполнения этих шагов по сравнению с их выполнением человеком заключается в том, что сборка воспроизводима, быстрее и менее подвержена ошибкам.

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

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

Конвенция важнее конфигурации: максимально избегайте конфигурации, выбирая реальные значения по умолчанию и предоставляя шаблоны проекта (типы).

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

Расширяемость с помощью подключаемых модулей. Система сборки Maven расширяется с помощью подключаемых модулей, что позволяет уменьшить размер ядра Maven. Ядро Maven, например, не знает, как компилировать исходный код Java, это обрабатывается подключаемым модулем компилятора.

Зависимости могут быть получены из локальной файловой системы, из Интернета или общедоступных репозиториев. Maven Central — это открытый репозиторий библиотек Java, который по умолчанию используется для поиска необходимых библиотек. Локальный репозиторий находится в папке .m2/repository домашнего каталога пользователя, Maven использует этот каталог для кэширования загруженных артефактов.

2. Как использовать это руководство по Maven

В этом руководстве рассматриваются основные понятия инструмента сборки Maven.

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

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

3. Установка Maven

Чтобы запустить сборку Maven из командной строки/терминала, необходимо установить инструменты командной строки Maven. Чтобы проверить, установлен ли Maven уже, введите в командной строке следующую команду:

Если вы видите выходные данные, включающие Apache Maven, у вас уже установлен Maven, и вы можете пропустить этот раздел.

3.1. Требования

У вас должен быть установлен Java SDK, а переменная среды JAVA_HOME должна указывать на действительный Java SDK.

Для ручной установки вы можете загрузить Maven со страницы загрузки Maven. Извлеките загруженный дистрибутив в выбранную папку на вашем компьютере и добавьте окружение M2_HOME, указывающее на этот каталог. Добавьте M2_HOME/bin в переменную пути.

Подробное руководство по установке см. в разделе Официальная установка Maven.

Для Linux большинство дистрибутивов включают Maven в свои основные репозитории. В Ubuntu вы можете использовать следующую команду в командной строке, чтобы установить его.

3.2. Подтвердить установку

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

Вы должны получить отзыв о том, какая версия Maven у вас установлена.

3.3. Необязательно: автозавершение кода для оболочек bash

Оболочка bash является оболочкой по умолчанию в Linux.

3.4. Настройки прокси

Чтобы настроить прокси-сервер, добавьте файл с именем .m2/settings.xml в домашнюю папку пользователя с настройками прокси-сервера, как показано ниже:

Пользователь и пароль требуются только в том случае, если вы запрашиваете базовую аутентификацию прокси-сервера.

4. Основные концепции Maven

По умолчанию конфигурация проекта Maven выполняется как минимум с помощью одного файла конфигурации pom.xml. Имя файла pom происходит от термина Объектная модель проекта.

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

Файл pom определяет:

идентификаторы создаваемого проекта

свойства, относящиеся к конфигурации сборки

плагины, обеспечивающие функциональность сборки через раздел build.

зависимости библиотеки и проекта через раздел dependencies

Каждый проект имеет свой файл pom. Вы можете настроить Maven для создания одного или нескольких проектов. Мультипроект обычно определяет файл pom в корне каталога и перечисляет отдельные проекты в разделе modules.

Результат сборки называется артефакт и может быть, например, исполняемым файлом JAR или zip-файлом.

Минимальный файл pom для одного проекта указан в следующем фрагменте. Этот проект не определяет никаких свойств, зависимостей или дополнительных плагинов.

<таблица> 1 4.0.0 — это последняя версия файловой структуры pom, которую можно использовать для Maven 2.x или 3.x 2 Уникальный идентификатор организации или проект 3 Название строящегося проекта 4 < td>Определяет текущую версию проекта 5 Установить уровень компилятора Java для проекта Java

Атрибуты groupId, ArtifactId и version более подробно описаны в следующем разделе. Полный список возможных записей в файле pom см. в справочнике по Maven pom.

4.1. Идентификаторы проекта через группу, артефакт и версию (GAV)

Проект Maven использует идентификатор группы, идентификатор артефакта, версию (также известную как GAV) и свойство упаковки для уникальной идентификации компонента Maven. Эти атрибуты описаны в следующей таблице.

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

Определяет уникальное имя проекта в пределах groupId. Если вы создаете новый проект через Maven, он также используется как корневая папка для проекта.

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

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

Например, вы можете использовать GAV, чтобы указать, какую именно версию библиотеки вы не хотите использовать.

Полные координаты Maven часто записываются в следующем формате: groupId:artifactId:packaging:version.

4.2. Родительский помпон и эффективный помпон

Каждый файл pom наследуется от родительского (супер) файла pom. Если явный родительский pom не определен, он наследуется от базового pom Maven.

Maven всегда выполняется против эффективного pom. Это комбинация настроек из pom.xml этого проекта, всех родительских pom, супер-pom, определенных в Maven, пользовательских настроек и активных профилей.

Чтобы увидеть действующий pom, используйте следующую команду:

4.3. Зависимости

4.3.1. Репозитории Maven и разрешение зависимостей

Репозиторий — это набор библиотек и артефактов проекта, хранящихся в структуре каталогов, аналогичной координатам Maven проекта.

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

При необходимости Maven загружает эти артефакты и подключаемые модули в локальный репозиторий. Локальный репозиторий по умолчанию находится в домашнем каталоге пользователя в папке .m2/repository. Если артефакт или подключаемый модуль доступен в локальном репозитории, Maven использует его для сборки, чтобы избежать ненужного сетевого трафика.

Каждый проект может определять зависимости, используя уникальный идентификатор (GAV) требуемой библиотеки.

Во время сборки система Maven пытается разрешить зависимости собираемых модулей. Для разрешения зависимостей Maven использует следующие источники в заданном порядке:

Проекты, включенные в один и тот же Maven, выполняются (так называемый Maven reactor)

Центральный репозиторий Maven

Maven поддерживает прямые и транзитивные зависимости. Прямые зависимости — это те, которые явно включены в pom-файл проекта. Транзитивные зависимости — это зависимости, требуемые нашими прямыми зависимостями.

Maven обрабатывает прямые и транзитивные зависимости.

Для этого вы указываете в файле pom внешние библиотеки, от которых зависит ваш проект, используя их GAV (идентификатор группы, идентификатор артефакта и версию), затем Maven загружает их, помещает в ваш локальный репозиторий Maven и делает доступными для сборки проекта. Также доступны транзитивные зависимости необходимых библиотек.

В следующем листинге показан файл pom с зависимостью от JUnit5.

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

Вы также можете определить расположение (вне репозитория Maven) для библиотеки.

1 Этот раздел сборки необходим, так как, начиная с версии 2.22.0, Maven Surefire и Maven Failsafe обеспечивают встроенную поддержку выполнения тестов на платформе JUnit.
2 Это определяет зависимости для тестов программного обеспечения (через атрибут области видимости) для JUnit5 (также известного как JUnit Jupiter)
1 Требуется, чтобы библиотека определялась через системный путь

Вы также можете определить зависимости снимков. Это библиотеки, которые могут постоянно развиваться. Maven загружает эти снимки при каждой сборке, даже если соответствующая версия уже доступна в локальном репозитории.

4.3.2. Исключение транзитивных зависимостей

Иногда ваши зависимости имеют конфликтующие транзитивные зависимости. Например, для библиотеки A требуется библиотека C версии 1.0.0, а для библиотеки B — версия 1.1.0. Чтобы использовать библиотеку C в версии 1.0.0, вы можете исключить C из зависимостей A.

В главе «Создание проекта» мы узнали, как создать приложение Java с помощью Maven. Теперь мы посмотрим, как создать и протестировать приложение.

Перейдите в каталог C:/MVN, в котором вы создали свое Java-приложение. Откройте папку ConsumerBanking. Вы увидите файл POM.xml со следующим содержимым. Обновите его, чтобы отразить текущую версию Java.

Здесь вы можете видеть, что Maven уже добавил Junit в качестве тестовой среды. По умолчанию Maven добавляет исходный файл App.java и тестовый файл AppTest.java в свою структуру каталогов по умолчанию, как обсуждалось в предыдущей главе.

Откроем командную консоль, перейдем в каталог C:\MVN\consumerBanking и выполним следующую команду mvn.

Maven начнет сборку проекта.

Вы построили свой проект и создали окончательный JAR-файл. Ниже приведены ключевые концепции обучения.

Мы ставим перед maven две цели: сначала очистить целевой каталог (очистить), а затем упаковать выходные данные сборки проекта в jar (пакет).

Упакованный jar доступен в папке ConsumerBanking\target как ConsumerBanking-1.0-SNAPSHOT.jar.

Тестовые отчеты доступны в папке ConsumerBanking\target\surefire-reports.

Maven компилирует файл(ы) исходного кода, а затем тестирует файл(ы) исходного кода.

Затем Maven запускает тестовые примеры.

Наконец, Maven создает пакет.

Теперь откройте командную консоль, перейдите в каталог C:\MVN\consumerBanking\target\classes и выполните следующую команду Java.

Вы увидите результат следующим образом —

Добавление исходных файлов Java

Давайте посмотрим, как мы можем добавить дополнительные файлы Java в наш проект. Откройте папку C:\MVN\consumerBanking\src\main\java\com\companyname\bank, создайте в ней класс Util как Util.java.

Обновите класс App, чтобы использовать класс Util.

Теперь откройте командную консоль, перейдите в каталог C:\MVN\consumerBanking и выполните следующую команду mvn.

После успешной сборки Maven перейдите в каталог C:\MVN\consumerBanking\target\classes и выполните следующую команду Java.

Читайте также: