java — Как создать jar файл в мавен проекте
У меня не получается в обычном (application) maven проекте настроить, чтобы при сборке на выходе получался исполняемый .jar файл.
Пробовал как тут https://maven.apache.org/plugins/maven-shade-plugin/examples/executable-jar.html
как тут https://maven.apache.org/plugins/maven-assembly-plugin/usage.html
и как тут https://www.mkyong.com/maven/how-to-create-a-jar-file-with-maven/
во всех случаях я имею папку target , а в ней две папки classes и generated-sources но ни в одной из подпапок файла jar нет.
Самое непонятное, что у этого товарища https://www.mkyong.com/maven/how-to-create-a-jar-file-with-maven/ можно скачать в конце урока проект целиком, что я и сделал. Но и там тоже не генерируется jar файл.
Вот мой pom файл:
<?xml version="1.0" encoding="UTF-8"?> <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</groupId> <artifactId>JavaOpenGl</artifactId> <version>1.0-SNAPSHOT</version> <packaging>jar</packaging> <name>JavaOpenGl</name> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <jdk.version>1.8</jdk.version> </properties> <dependencies> <dependency> <groupId>org.jogamp.jogl</groupId> <artifactId>jogl-all-main</artifactId> <version>2.3.2</version> </dependency> <dependency> <groupId>org.jogamp.gluegen</groupId> <artifactId>gluegen-rt-main</artifactId> <version>2. 3.2</version> </dependency> </dependencies> <build> <finalName>JavaOpenGl</finalName> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>2.3.2</version> <configuration> <source>${jdk.version}</source> <target>${jdk.version}</target> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <version>2.4.1</version> <configuration> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> <archive> <manifest> <mainClass>com. mycompany.testmaven.Main</mainClass> </manifest> </archive> </configuration> <executions> <execution> <id>make-assembly</id> <phase>package</phase> <goals> <goal>single</goal> </goals> </execution> </executions> </plugin> </plugins> </build> </project>
- java
- maven
- jar
- В IDEA откройте терминал (через меню
View
⇒Tool Windows
⇒Terminal Alt+F12
). - В терминале введите
mvn install
(команда должна вводиться в директории, где лежит вашpom.
).
В случае успешной сборки, в папке target будет лежать Ваш jar-файл.
Также можно настроить сборку jar файла через Artifacts:
- https://www.jetbrains.com/help/idea/2016.3/working-with-artifacts.html
- https://www.jetbrains.com/help/idea/2016.3/artifacts.html
- Создаем файл
{ProjectName}\META-INF\MANIFEST.MF
- Пишем в него строчку
Main-Class: main.company.Main
— имя основного класса вместе с пакетом относительно каталога{ProjectName}\src\main\java
- В файле
{ProjectName}\pom.xml
пишем следующее:<?xml version="1.0" encoding="UTF-8"?> <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>test</groupId> <artifactId>test</artifactId> <name>test</name> <version>1.
0-SNAPSHOT</version> <packaging>jar</packaging> <properties> <java.version>1.8</java.version> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> </properties> <build> <finalName>test</finalName> <defaultGoal>package</defaultGoal> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.6.1</version> <configuration> <source>${java.version}</source> <target>${java.version}</target> </configuration> </plugin> <plugin> <artifactId>maven-jar-plugin</artifactId> <version>3. 0.0</version> <configuration> <goal>jar:inplace</goal> <archive> <manifestFile>META-INF/MANIFEST.MF</manifestFile> </archive> <outputDirectory>artifacts</outputDirectory> </configuration> </plugin> </plugins> </build> </project> - PROFIT..
Зарегистрируйтесь или войдите
Регистрация через Google Регистрация через Facebook Регистрация через почтуОтправить без регистрации
ПочтаНеобходима, но никому не показывается
Отправить без регистрации
ПочтаНеобходима, но никому не показывается
By clicking “Отправить ответ”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.
Плагин Apache Maven JAR — использование
Несколько кратких примеров использования этого плагина. Если вы хотите использовать расширенные конфигурации, вам следует ознакомиться с разделом «Пример». Документация для архиватора Maven.
Для выполнения архивации в этой версии подключаемого модуля Maven JAR используется Maven Archiver 3.6.0.
Примечание: Если вам нужно подписать файлы JAR, вместо этого следует использовать подключаемый модуль Maven Jarsigner.
Как создать файл JAR
Если вы хотите создать JAR-файл с помощью Maven, вам сначала нужно создать pom.xml
-файл как минимум со следующим содержимым:
<проект>4.0.0 com.mycompany.project ядро <версия>1.0-SNAPSHOTверсия> проект>
Поскольку ‘jar’ является типом упаковки по умолчанию, в данном случае его устанавливать не требуется. Помимо вышеперечисленного, вам обычно нужны настоящие исходные файлы Java, которые должны быть расположены в пределах
. Если вам нужны дополнительные ресурсы в вашем пути к классам (например, файлы свойств), они должны быть расположены в src/main/resources
. Теперь мы можем создать JAR-файл с помощью команды ниже:
мвн пакет
Фаза «пакет» всегда отвечает за объединение всех файлов в артефакте, в данном случае JAR-файл.
В каталоге target
вашего проекта вы увидите сгенерированный файл jar с именем вроде: ‘core-1.0-SNAPSHOT.jar’. Полученный файл «jar» содержит скомпилированные файлы классов Java, а также файлы из источник/основной/ресурсы
.
Обычно нет необходимости явно указывать «maven-jar-plugin», потому что он привязан к жизненному циклу сборки Maven.
Для получения полной документации щелкните здесь.
Модульные файлы JAR
Система Java Platform Module System (JPMS) также внесла изменения в спецификации файлов JAR — модульные файлы JAR. Модульные файлы JAR — это файлы JAR с файлом module-info.class
в корневом каталоге (или в области версий для файлов JAR с несколькими выпусками). Если проект содержит module-info.class
результирующий JAR будет модульным JAR без необходимости какой-либо настройки, независимо от используемой версии плагина.
Начиная с версии 3.1.2, если файл JAR содержит module-info.class
, этот подключаемый модуль обновит модульный дескриптор ( module-info.class
) дополнительными атрибутами, такими как список включенных пакетов, и проверит результирующий модульный дескриптор (например, если все службы, предоставляемые модулем, фактически включены в файл JAR). Наиболее заметным дополнительным добавленным атрибутом является основной класс модуля. Если манифест JAR содержит Атрибут Main-Class
, этот плагин установит для основного класса модуля то же значение (например, как установить его, читая Make The Jar Executable). Внутри подключаемый модуль использует инструмент JDK jar
, поэтому для добавления дополнительных атрибутов и проверки модульного дескриптора Maven следует запускать с JDK версии 9 или новее. Если используется версия 8 или более ранняя, результирующий JAR-файл по-прежнему будет модульным JAR-файлом (поскольку он содержит module-info.class
), но никакие дополнительные атрибуты не добавляются и проверка не выполняется.
java — Как создать исполняемый/запускаемый JAR-файл с зависимостями с помощью Maven?
См. пример исполняемого файла jar с maven (GitHub)
Примечания
Эти плюсы и минусы предоставлены Стефаном.
Для ручного развертывания
- Профессионалы
- Минусы
- Зависимости не в последней банке.
Копировать зависимости в указанный каталог
<плагин>org.apache.maven.plugins maven-зависимость-плагин <выполнения> <исполнение>копировать-зависимости <фаза>подготовить-пакетфаза> <цели>копировать-зависимости цели> <конфигурация>${project. build.directory}/${project.build.finalName}.lib конфигурация> исполнение> выполнения> плагин>
Сделать исполняемый файл JAR и указать путь к классам
org.apache.maven.plugins maven-jar-плагин <конфигурация> <архив> <манифест>истина ${project.build.finalName}.lib/ ${full.qualified.main.class} манифест> архив> конфигурация> плагин>
В этот момент файл JAR фактически является исполняемым с внешними элементами пути к классам.
java -jar target/${project.build.finalName}.jar
Создание развертываемых архивов
Файл JAR является исполняемым только с родственным каталогом ...lib/
. Нам нужно сделать архивы для развертывания с каталогом и его содержимым.
<плагин>org. apache.maven.plugins maven-antrun-plugin <выполнения> <исполнение>antrun-архив <фаза>пакетфаза> <цели> <цель>бегцель> цели> <конфигурация> <цель>цель> конфигурация> исполнение> выполнения> плагин>
Теперь у вас есть target/${project. build.finalName}.(zip|tar|tar.bz2|tar.gz)
, каждый из которых содержит jar
и lib/*
.
Плагин сборки Apache Maven
- Профи
- Минусы
- Нет поддержки перемещения класса (используйте maven-shade-plugin, если требуется перемещение класса).
<плагин>org.apache.maven.plugins maven-assembly-plugin <выполнения> <исполнение> <фаза>пакетфаза> <цели> <цель>одинцель> цели> <конфигурация> <архив> <манифест>${full.qualified.main.class} манифест> архив>конфигурация> исполнение> выполнения> плагин> jar-с-зависимостями
У вас есть target/${project.bulid.finalName}-jar-with-dependencies.jar
.
Плагин Apache Maven Shade
- Pros
- Минусы
<плагин>org.apache.maven.plugins плагин maven-shade <выполнения> <исполнение> <цели>оттенок цели> <конфигурация>true <трансформеры>${full.qualified.main.class} трансформер> трансформеры> конфигурация> исполнение> выполнения> плагин>
У вас есть target/${project.build.finalName}-shaded.jar
.
onejar-maven-plugin
- Профи
- Минусы
- Активно не поддерживается с 2012 г.
<плагин>com. jolira onejar-maven-плагин <выполнения> <исполнение> <конфигурация>${full.qualified.main.class} true ${project.build.finalName}-onejar.${project.packaging} конфигурация> <цели>одна банка цели> исполнение> выполнения> плагин>
Плагин Spring Boot Maven
- Профессионалы
- Минусы
- Добавление потенциально ненужных классов, связанных с Spring и Spring Boot.
<плагин>org.springframework.boot spring-boot-maven-плагин <выполнения> <исполнение> <цели>переупаковать цели> <конфигурация>весенняя загрузка ${full.