Как создать jar файл в intellij idea maven

Обновлено: 07.07.2024

Этот урок освещает создание вами простого Java-приложения с использованием Maven.

Что вы создадите

Вы создадите простое приложение и соберете его с помощью Maven.

Что вам потребуется

  • Примерно 15 минут свободного времени
  • Любимый текстовый редактор или IDE и выше

Как проходить этот урок

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

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

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

Настройка проекта

Для начала вам необходимо настроить Java-проект перед тем, как собрать его Maven'ом. Т.к. урок посвящен Maven, сделаем проект максимально простым, насколько это возможно.

Создание структуры каталогов

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

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

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

Распакуйте архив и добавьте путь к каталогу bin в переменную окружения path.

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

Теперь у вас есть установленный Maven.

Создание простой сборки Maven

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

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

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

  • <modelVersion> - версия POM-модели (всегда 4.0.0)
  • <groupId> - группа или организация, к которой принадлежит проект. Чаще всего выражается в виде перевернутого наоборот доменного имени
  • <artifactId> - имя, которое будет передано библиотеке экземпляра(artifact) проекта (к примеру, имя его JAR или WAR файла)
  • <version> - версия, с которой будет собран проект
  • <packaging> - как проект должен быть упакован. По умолчанию, с "jar" упаковывается в JAR-файл, "war" - WAR-файл

На данном этапе мы имеем минимальное, но уже рабочее определение Maven-проекта.

Сборка Java кода

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

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

Этим вы запустите Maven, передав ему указание на выполнение задачи compile. Когда он закончит, вы должны найни скомпилированные .class файлы в target/classes директории.

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

Задача package включает компиляцию вашего Java кода, запуск тестов, а в конце упаковывает в JAR-файл в target директории. Название JAR-файла будет основано на <artifactId> и <version> . К примеру, с минимальным pom.xml(см. выше), JAR-файл будет иметь название gs-maven-initial-0.1.0.jar.

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

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

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

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

Объявление зависимостей

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

К примеру, предположим, что в дополнение к "Hello World!" вы хотите, чтобы приложение печатало текущую дату и время. Вы могли бы использовать функциональность из стандартных(native) Java библиотек, но мы можем сделать это и другими интересными способами, например с помощью Joda Time библиотеки.

Для начала, изменим HelloWorld.java , как показано ниже:

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

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

  • <groupId> - группа или организация, к которой принадлежит зависимость.
  • <artifactId> - необходимая библиотека
  • <version> - версия необходимой библиотеки

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

  • provided - зависимости, которые требуются для компиляции кода проекта, но которые будут доступны во время выполнения кода контейнером(например, Java Servlet API)
  • test - зависимости, которые используются для компиляции и запуска тестов, но не требуемые для сборки или выполнения кода проекта

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

Здесь полная версия pom.xml :

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

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

Java | Используйте IntelliJ IDEA для упаковки обычных проектов / проектов Maven в файлы jar и их запуска

Прежде всего, убедитесь, что в написанной вами программе нет ошибок.

1. Общее машиностроение

Нажмите на структуру проекта => Артефакты => + число => JAR => из моделей с зависимостями .



выберите основную категорию



Изменить каталог для META-INF / MANIFEST.MF:

Лучше всего, чтобы путь был на том же уровне, что и src, иначе это может вызвать проблемы. Собственный авторский тест также можно поместить в папку с ресурсами.

В настоящее время в корневом каталоге проекта будет файл MANIFEST.MF. Это необходимый файл для пакета jar. В этом файле содержится много информации о файле Jar, поэтому я не буду вдаваться в подробности. объяснение здесь.


Наконец построить артефакты



Упакованный файл jar находится в папке out в корневом каталоге проекта.


2. Проект Maven

Использовать Maven непосредственно для упаковки очень удобно.

Щелкните на правой боковой панели Maven => Имя проекта => Жизненный цикл => пакет => Щелкните правой кнопкой мыши и выберите «Запустить сборку Maven».


Упакованный файл jar находится в целевой папке в корневом каталоге проекта.



Spring boot имеет встроенный Tomcat. Когда вы видите запуск Tomcat, это означает, что пакет jar успешно запущен (я установил порт Tomcat на 8888, если вы не установите Tomcat по умолчанию порт на 8080)

Интеллектуальная рекомендация


Michael.W Поговорите о Hyperledger Fabric. Проблема 20 - Подробная индивидуальная сортировка узла с пятью порядками с исходным кодом для чтения.

Michael.W Поговорите о Hyperledger Fabric. Проблема 20 - Подробная индивидуальная сортировка узла с пятью порядками с исходным кодом чтения Fabric Файл исходного кода одиночного режима находится в ord.


Мяу Пасс Матрица SDUT

Мяу Пасс Матрица SDUT Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Problem Description Лянцзян получил матрицу, но эта матрица была особенно уродливой, и Лянцзян испытал отвращение. Чт.


Гессенская легкая двоичная структура удаленного вызова

Hessian - это легкая двоичная структура удаленного вызова, официальный адрес документа, в основном он включает протокол удаленного вызова Hessian, протокол сериализации Hessian, прокси-сервер клиента .


TCP Pasket и распаковка и Нетти Solutions

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

Это пост заметка о том, как я познакомился с языком Kotlin, какие использовал для этого ресурсы, инструменты, и как я собрал его в jar и запустил в консоли.

В общем-то я PHP программист, немного заком с Java. На днях решил посмотреть Kotlin. Это менее строго типизированный язык от JetBrains до того, что он, по сути, статически типизированный. В этом его основное принципиальное отличие от Java, плюс Kotlin имеет свой приятный синтаксис. Kotlin может быть скомпилирован в JVM или JavaScript.

Инструкции по установке там же на сайте. Версия 13+.

Плагин добавляет автозаполнение и возможность создавать Kotlin проекты.
Так же добавляются инструменты для компиляции Kotlin.

Особенность Kotlin в том, что он полностью совместим с Java. Т.е. код, написанный на Kotlin можно вызывать в Java и наоборот. Следовательно, все инструменты и библиотеки, которые используются для работы с Java, применимы и для Kotlin.

Если проект в IDE был создан не Kotlin изначально, то после установки плагина можно включить поддержку Kotlin. После включения в проект будут доаблены jar библиотеки Kotlin в директорию /lib.

Я включил Kotlin и написал следующий код для теста в папке /src/testing:

Для начала я выполнял в IDE файл котлина отдельно, чтобы убедиться, что плагин работает и код компилируется.

Потом я создал java класс:

Тут видно, что я хочу принять аргумент и передать его напрямую в котлин. В котлине же я использовал пример с языками и добавил еще один свой, который зависит от аргумента — моего ник нейма. В Java можно вызывать методы и получать доступ к переменным из котлина путем вызова — ИмяпакетаPackage.имяметода().

Если правильно настроить в IDE выполнение проекта, то можно задать с каким аргументом вызывать программу. Но это очень не удобно, я хотел бы менять аргумент на лету, чтобы отловить ошибки, для тестироавния. Мне нужно было собрать jar для запуска из консоли.
В проекте не было maven изначально, и я его туда добавил.

Тут используется настройка для kotlin-maven-plugin, где указывается, в какой директории искать файлы.
Так же, используется maven-jar-plugin. Тут очень важно правильно прописать < manifest >, иначе предстоит долго разбираться, почему jar не запускается с ошибкой "No Main Manifest Attribute".
После билда в директории /target будет лежать jar проекта. В Idea есть отдельное окно maven projects, откуда удобно управлять построением.

Чтобы запустить jar обычно выполняется команда

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

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

Теперь код работает верно. Как видно, я получил аргумент в java, вывел его, далее я передал его в kotlin, и на его основе отработала конструкция when (по смыслу похожа на switch-case).

Для того, чтобы собрать jar с включением зависимых jar в билд, можно воспользоваться плагином maven — maven-dependency-plugin. Или onejar-maven-plugin к проекту one-jar.

Я решил использовать one-jar.

Далее пересобрать проект.


В директории /target появится файл имяпроекта.one-jar.jar. Его можно вызвать обычным методом.

На этом настройка проекта для меня закончена. Далее можно изучать Kotlin по приведенным выше ссылкам на документацию.
Лично мне язык очень понравился. Несомненно он займет свою нишу, так же, как и язык hack, который разрабатывает Facebook, как свою версию PHP.

Понятие runnable jar или uber jar возникает тогда, когда вы задумываетесь о разворачивании вашего проекта на удалённом сервере. У вас должна быть уверенность в том, что в произвольном окружении, где окажется ваше приложение, в classpath будут все необходимые классы из используемых вами библиотек.

Конечно, никакой проблемы нет, если вы вообще не используете сторонние библиотеки. Но я уверен, что всё-таки используете, если только ваш проект не «Hello World».

Чтобы гарантировать наличие нужных версий всех библиотек, нам проще поставлять их вместе с нашим приложением. Для удобства развёртывания все библиотеки можно поместить в один jar-файл. Подробнее о том, что такое jar-архив и как его получить, мы рассматривали в статье Как скомпилировать исходники java вручную.

Рассмотрим конкретный пример. Пусть имеется приложение, которое использует класс StringUtils из популярного проекта Apache Commons Lang:

public class Main

public static void main(String[] args) System.out.println(StringUtils.isBlank( "" ));
>
>

В pom-файле нашего maven-проекта должно быть прописано следующее:

  1. Секция dependencies с указанием всех сторонних зависимостей, используемых в нашем проекте.
  2. Секция build/plugins с указанием стандартного плагина maven-compiler-plugin, в котором указываем целевую версию jdk.

Итак, чтобы получить «запускаемый» (runnable) jar со всеми необходимыми библиотеками, нам всего лишь надо расширить секцию build ещё одним плагином от того же Apache под названием shade.

<plugin>
<groupId> org.apache.maven.plugins </groupId>
<artifactId> maven-shade-plugin </artifactId>
<version> 3.1.1 </version>
<configuration>
<transformers>
<transformer
implementation= "org.apache.maven.plugins.shade.resource.ManifestResourceTransformer" >
<mainClass> ru.devmark.Main </mainClass>
</transformer>
</transformers>
</configuration>
<executions>
<execution>
<phase> package </phase>
<goals>
<goal> shade </goal>
</goals>
</execution>
</executions>
</plugin>

Единственное, что здесь надо указать - это параметр mainClass, т.е. тот класс, где находится статический метод main().

Теперь, если ещё раз собрать наш проект, то на выходе вы получите не один, а два jar-файла. Один в несколько килобайт, а другой в несколько раз больше. Если вы откроете через любой архиватор большой jar-файл, то увидите внутри помимо наших классов также и все классы, которые входят в библиотеку common-lang3. Именно этот архив можно запускать из командной строки и он будет корректно работать через java -jar, т.к. содержит все необходимые классы внутри себя.

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