Как создать исполняемый jar-файл, который является исполняемым (Maven-Jfoenix-Hibernate-IntelliJ) __ Может кто-нибудь решит тему / закройте, пожалуйста

Я пытаюсь создать исполняемый файл JAR из проекта, который использует: Maven, JFX, JFoenix, Hibernate ... в IntelliJ

Я перепробовал много решений, которые мы можем найти на разных форумах / сайтах разработчиков (включая Stackru). Поэтому никто не работает для меня..

Я попытался создать исполняемый файл JAR с:

  • Команда: mvn compile _, которая создает два исполняемых jar-файла, которые ничего не выполняют..

  • Создайте артефакт: Файл -> Сохранить все -> Структура проекта -> + -> Jar -> От зависимостей модулей -> Основной класс: MyMainClass / Каталог: src\main\java ИЛИ src \ main \ resources (потому что он работал на кого-то чтобы изменить это.) -> Хорошо
    Build -> Build artifact -> Build OR Rebuild. На данный момент у меня есть исполняемый файл, но он ничего не выполняет..

  • Подключение затенения: (вы увидите в коде pom.xml), что приводит к результату:
Failed to execute goal
org.apache.maven.plugins:maven-shade-plugin:3.2.1:shade (default-cli)
on project GymFormManager: Failed to create shaded artifact, project main
artifact does not exist.

pom.xml, я беру только важную часть, потому что она слишком большая:

...

<modelVersion>4.0.0</modelVersion>
<groupId>com.gymform.maven</groupId>
<artifactId>GymFormManager</artifactId>
<version>1.0-SNAPSHOT</version>

</dependencies>
    ...   
    <!-- Try To Create Executable Jar -->
    <dependency>
        <groupId>commons-lang</groupId>
        <artifactId>commons-lang</artifactId>
        <version>2.1</version>
    </dependency>
    <dependency>
        <groupId>org.codehaus.plexus</groupId>
        <artifactId>plexus-utils</artifactId>
        <version>1.1</version>
    </dependency>
</dependencies>

<build>
    <plugins>

        ...

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <configuration>
                <archive>
                    <manifest>
                        <addClasspath>true</addClasspath>
                        <mainClass>com.gymformmanager.Main</mainClass>
                    </manifest>
                </archive>
            </configuration>
        </plugin>

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

              <!-- I have tried with and without hadedArtifact -->       <shadedArtifactAttached>true</shadedArtifactAttached>
                        <shadedClassifierName>GymFormManager</shadedClassifierName> <!-- Any name that makes sense -->
                    </configuration>
                </execution>
            </executions>
        </plugin>

В настоящее время у меня есть три исполняемых jar, которые ничего не делают:

Первый исполняемый файл Путь первого исполняемого файла

Второй и третий исполняемые их пути

Изменить: После следования советам Джони, у меня есть эта ошибка:

Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.UnsupportedClassVersionError: com/gymformmanager/Main has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runt
ime only recognizes class file versions up to 52.0
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(Unknown Source)
        at java.security.SecureClassLoader.defineClass(Unknown Source)
        at java.net.URLClassLoader.defineClass(Unknown Source)
        at java.net.URLClassLoader.access$100(Unknown Source)
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source)

Я решил проблему версии с этим: Windows игнорирует JAVA_HOME: как установить JDK по умолчанию?

Error: JavaFX runtime components are missing, and are required to run this application

Пока в моем pom.xml есть зависимость:

 <dependency>
        <groupId>org.openjfx</groupId>
        <artifactId>javafx-controls</artifactId>
        <version>11</version>
 </dependency>

2 ответа

Решение

Вы можете попробовать собрать так называемый фатжар с Maven:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-assembly-plugin</artifactId>
    <configuration>
        <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
        </descriptorRefs>
        <archive>
            <manifest>
                <mainClass>com.gymformmanager.Main</mainClass>
            </manifest>
        </archive>
    </configuration>
    <executions>
        <execution>
            <id>assemble-all</id>
            <phase>package</phase>
            <goals>
                <goal>single</goal>
            </goals>
        </execution>
    </executions>
 </plugin>

Это создаст в вашей выходной директории дополнительный файл jar с именем GymFormManager-jar-with-dependencies.jar. Вы можете запустить его с:

java -jar GymFormManager-jar-with-dependencies.jar

Думаю, javafx-maven-plugin - хороший вариант для создания приложения JFX. Он основан на Java Packager Tool и может создавать как собственный пакет, так и jar. Вызовmvn jfx:jar начать строительство.

<plugin>
    <!-- Generate Executable JFX JAR -->
    <groupId>com.zenjava</groupId>
    <artifactId>javafx-maven-plugin</artifactId>
    <version>8.8.3</version>
    <configuration>
        <vendor>${vendor}</vendor>
        <mainClass>${mainClass}</mainClass>
        <allPermissions>true</allPermissions>
        <manifestAttributes>
            <Implementation-Title>${project.name}</Implementation-Title>
            <Implementation-Version>${project.version}</Implementation-Version>
            <Implementation-Vendor>${project.organization.name}</Implementation-Vendor>
            <Build-Timestamp-Format>${maven.build.timestamp.format}</Build-Timestamp-Format>
            <Build-Timestamp>${dev.build.timestamp}</Build-Timestamp>
        </manifestAttributes>
        <jfxMainAppJarName>${jfxMainAppJarName}</jfxMainAppJarName>
    </configuration>
    <executions>
        <execution>
            <id>create-jfxjar</id>
            <phase>package</phase>
            <goals>
                <goal>build-jar</goal>
            </goals>
        </execution>
    </executions>
</plugin>

Если вы хотите создать исполняемый файл JAR, вам необходимо соответствующим образом настроить Maven Archiver. Вы должны сказать ему, какой основной класс использовать. Это делается с помощью элемента конфигурации. Вот пример pom.xml, настроенный для добавления classpath и использования класса full.qualified.MainClass в качестве основного класса:

<project>
  ...
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
        ...
        <configuration>
          <archive>
            <manifest>
              <addClasspath>true</addClasspath>
              <mainClass>fully.qualified.MainClass</mainClass>
            </manifest>
          </archive>
        </configuration>
        ...
      </plugin>
    </plugins>
  </build>
  ...
  <dependencies>
    <dependency>
      <groupId>commons-lang</groupId>
      <artifactId>commons-lang</artifactId>
      <version>2.1</version>
    </dependency>
    <dependency>
      <groupId>org.codehaus.plexus</groupId>
      <artifactId>plexus-utils</artifactId>
      <version>1.1</version>
    </dependency>
  </dependencies>
  ...
</project>
Другие вопросы по тегам