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
0

  1. В IDEA откройте терминал (через меню ViewTool WindowsTerminal Alt+F12).
  2. В терминале введите mvn install (команда должна вводиться в директории, где лежит ваш pom.
    xml
    ).

В случае успешной сборки, в папке 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
  1. Создаем файл {ProjectName}\META-INF\MANIFEST.MF
  2. Пишем в него строчку Main-Class: main.company.Main — имя основного класса вместе с пакетом относительно каталога {ProjectName}\src\main\java
  3. В файле {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>
  4. 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, которые должны быть расположены в пределах

источник/основной/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.