Создайте Runnable Jar проекта JAVA с JAVAFX в качестве внешней библиотеки - PullRequest
1 голос
/ 04 апреля 2020

У меня есть проект с основным классом Swing java. В этом классе я создаю объект, представленный другим классом, который расширяет Application и использует JAVAFX. В Eclipse я импортировал всю необходимую библиотеку JAVAFX, и когда я запускаю проект JAVA, все работает хорошо.

Моя проблема возникает, когда я хочу собрать весь проект в работающую флягу. Jar создается без ошибок, все классы Java работают, а только класс JAVAFX - нет. Я не понимаю, как собрать проект Java с внешним классом JAVAFX и зависимостями в один jar, чтобы все работало. Какие-либо предложения? Я много пробовал безрезультатно ...

Если вам нужен какой-то кусок кода или некоторая информация о настройках проекта, я буду рад их написать. Спасибо за совет.

Я также пытался с Maven:

<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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>org.openjfx</groupId>
  <artifactId>AvalonMikGiu</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>jar</packaging>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.release>11</maven.compiler.release>
        <javafx.version>11</javafx.version>
    </properties>

  <name>AvalonMikGiu</name>

  <dependencies>
     <dependency>
        <groupId>org.openjfx</groupId>
        <artifactId>javafx-controls</artifactId>
        <version>${javafx.version}</version>
        <classifier>win</classifier>
    </dependency>
    <dependency>
        <groupId>org.openjfx</groupId>
        <artifactId>javafx-controls</artifactId>
        <version>${javafx.version}</version>
        <classifier>linux</classifier>
    </dependency>
    <dependency>
        <groupId>org.openjfx</groupId>
        <artifactId>javafx-controls</artifactId>
        <version>${javafx.version}</version>
        <classifier>mac</classifier>
    </dependency>
      <dependency>
        <groupId>org.openjfx</groupId>
        <artifactId>javafx-graphics</artifactId>
        <version>${javafx.version}</version>
        <classifier>win</classifier>
    </dependency>
    <dependency>
        <groupId>org.openjfx</groupId>
        <artifactId>javafx-graphics</artifactId>
        <version>${javafx.version}</version>
        <classifier>linux</classifier>
    </dependency>
    <dependency>
        <groupId>org.openjfx</groupId>
        <artifactId>javafx-graphics</artifactId>
        <version>${javafx.version}</version>
        <classifier>mac</classifier>
    </dependency>
    <dependency>
        <groupId>org.openjfx</groupId>
        <artifactId>javafx-swing</artifactId>
        <version>${javafx.version}</version>
        <classifier>win</classifier>
    </dependency>
    <dependency>
        <groupId>org.openjfx</groupId>
        <artifactId>javafx-swing</artifactId>
        <version>${javafx.version}</version>
        <classifier>linux</classifier>
    </dependency>
    <dependency>
        <groupId>org.openjfx</groupId>
        <artifactId>javafx-swing</artifactId>
        <version>${javafx.version}</version>
        <classifier>mac</classifier>
    </dependency>
     <dependency>
        <groupId>org.openjfx</groupId>
        <artifactId>javafx-fxml</artifactId>
        <version>${javafx.version}</version>
        <classifier>win</classifier>
    </dependency>
    <dependency>
        <groupId>org.openjfx</groupId>
        <artifactId>javafx-fxml</artifactId>
        <version>${javafx.version}</version>
        <classifier>linux</classifier>
    </dependency>
    <dependency>
        <groupId>org.openjfx</groupId>
        <artifactId>javafx-fxml</artifactId>
        <version>${javafx.version}</version>
        <classifier>mac</classifier>
    </dependency>
    <dependency>
        <groupId>org.openjfx</groupId>
        <artifactId>javafx-base</artifactId>
        <version>${javafx.version}</version>
        <classifier>win</classifier>
    </dependency>
    <dependency>
        <groupId>org.openjfx</groupId>
        <artifactId>javafx-base</artifactId>
        <version>${javafx.version}</version>
        <classifier>linux</classifier>
    </dependency>
    <dependency>
        <groupId>org.openjfx</groupId>
        <artifactId>javafx-base</artifactId>
        <version>${javafx.version}</version>
        <classifier>mac</classifier>
    </dependency>
    <dependency>
        <groupId>org.openjfx</groupId>
        <artifactId>javafx-media</artifactId>
        <version>${javafx.version}</version>
        <classifier>win</classifier>
    </dependency>
    <dependency>
        <groupId>org.openjfx</groupId>
        <artifactId>javafx-media</artifactId>
        <version>${javafx.version}</version>
        <classifier>linux</classifier>
    </dependency>
    <dependency>
        <groupId>org.openjfx</groupId>
        <artifactId>javafx-media</artifactId>
        <version>${javafx.version}</version>
        <classifier>mac</classifier>
    </dependency>
    <dependency>
        <groupId>org.openjfx</groupId>
        <artifactId>javafx-web</artifactId>
        <version>${javafx.version}</version>
        <classifier>win</classifier>
    </dependency>
    <dependency>
        <groupId>org.openjfx</groupId>
        <artifactId>javafx-web</artifactId>
        <version>${javafx.version}</version>
        <classifier>linux</classifier>
    </dependency>
    <dependency>
        <groupId>org.openjfx</groupId>
        <artifactId>javafx-web</artifactId>
        <version>${javafx.version}</version>
        <classifier>mac</classifier>
    </dependency>
  </dependencies>

  <build>
      <plugins>
          <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-compiler-plugin</artifactId>
              <version>3.8.1</version>
              <configuration>
                  <release>${maven.compiler.release}</release>
              </configuration>
          </plugin>
          <plugin>
              <groupId>org.openjfx</groupId>
              <artifactId>javafx-maven-plugin</artifactId>
              <version>0.0.3</version>
              <configuration>
                  <mainClass>src.QuickFlip2</mainClass>
              </configuration>
          </plugin>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>3.2.0</version>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                    <configuration>
                        <shadedArtifactAttached>true</shadedArtifactAttached>
                        <shadedClassifierName>project-classifier</shadedClassifierName>
                        <outputFile>shade\${project.artifactId}.jar</outputFile>
                        <transformers>
                            <transformer implementation=
                                                 "org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                <mainClass>src.MainGame</mainClass>
                            </transformer>
                        </transformers>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
  </build>
</project>

Сборка работает хорошо, но когда я запускаю jar-файл, я получаю эту ошибку:

Error: Could not find or load main class MainGame
Caused by: java.lang.ClassNotFoundException: MainGame

Я не знаю не понимаю, почему не найти мой основной класс ..

1 Ответ

0 голосов
/ 09 апреля 2020

Я нашел простое решение: (Eclipse)

  1. Удалить класс, расширяющий Application, и импортировать методы в Java class
  2. Включить Библиотека JavaFX в проекте Eclipse и импорт их в Java class
  3. Экспорт проекта в Runnable Jar, выберите обработку: «Копировать необходимые библиотеки в подпапку рядом с сгенерированным JAR»
  4. Один раз экспортируется, следующий шаг:

Windows:

скопировать папку javafx-sdk- "version" / bin в ту же папку project.jar и procjet_lib (если использовать изображения в проекте, скопируйте папку_имя рядом с ними)

(папка JavaFX lib уже должна была быть включена в папку project_lib с помощью eclipse)

MAC / LINUX:

у них нет папки bin JavaFX, поэтому скопируйте все файлы в папке lib JavaFX в ваш project_lib (перезаписать .. возможно, файл jar дублирован) .

Примечание. скачайте нужный jdk пакет JavaFX, имя выглядит так: openjfx-11.0.2_ linux -x64_bin-sdk openjfx-11.0.2_ windows -x64_bin-sdk openjfx-11.0.2_osx-x64_bin-sdk

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...