JDK 11 и JavaFX 11: сборка для ARM (Tinker Board) не работает (несоответствие хэшей)

У меня есть проект JavaFX 8, который я разрабатываю в Windows 10 с NetBeans 8.2. JAR, который я собираю из этого, я использую на плате Asus Tinker Board.

В JDK 11 и JavaFX 11 я хочу воспользоваться преимуществами некоторых новых функций и надеяться на некоторый прирост производительности. После установки NetBeans 10 и с помощью руководства: https://openjfx.io/openjfx-docs/#introduction (раздел JavaFX и NetBeans> Немодульный с Maven), я успешно перенесен и могу запустить приложение в своей системе Windows.

Либо через IDE, либо из командной строки: java --module-path% PATH_TO_FX% --add-modules = javafx.c ontrols, javafx.fxml, javafx.graphics, javafx.media -jar Praatpaal2-2.0-jar-with -dependencies.jar

По сравнению с JavaFX 8 модули JavaFX теперь добавляются как модули.

Но когда я делаю то же самое на плате Asus Tinker Board (под управлением Tinker OS (Debian)), я получаю следующую ошибку:

Произошла ошибка во время инициализации загрузочного уровня java.lang.module.FindException: хэш javafx.base (d87df23ee5c54c7ff062c4f8572bab8aaf6c1775854662008fccdb993957bcad) отличается от ожидаемого хеш-кода (320c5b0ffafc22355c950c9daf1

Информации об этом несоответствии хешей очень мало. Я подозреваю, что он либо пытается загрузить версию javafx.base.jar для Windows, либо я использую org.openjfx в Maven pom.xml, но ссылаюсь на GluonHQ JavaFX во время выполнения, либо что-то не так с модульной настройкой, которая у меня есть .

Зависимости и часть сборки pom.xml выглядят следующим образом:

<dependencies>
        <dependency>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx-controls</artifactId>
            <version>11.0.2</version>
            <classifier>win</classifier>
        </dependency>
        <dependency>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx-fxml</artifactId>
            <version>11.0.2</version>
            <classifier>win</classifier>
        </dependency>
        <dependency>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx-graphics</artifactId>
            <version>11.0.2</version>
            <classifier>win</classifier>
        </dependency>
        <dependency>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx-media</artifactId>
            <version>11.0.2</version>
            <classifier>win</classifier>
        </dependency>
        <dependency>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx-controls</artifactId>
            <version>11.0.2</version>
            <classifier>linux</classifier>
        </dependency>
        <dependency>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx-fxml</artifactId>
            <version>11.0.2</version>
            <classifier>linux</classifier>
        </dependency>
        <dependency>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx-graphics</artifactId>
            <version>11.0.2</version>
            <classifier>linux</classifier>
        </dependency>
        <dependency>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx-media</artifactId>
            <version>11.0.2</version>
            <classifier>linux</classifier>
        </dependency>
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.6</version>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.8.1</version>
        </dependency>
        <dependency>
            <groupId>net.samuelcampos</groupId>
            <artifactId>usbdrivedetector</artifactId>
            <version>2.0.4</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.0</version>
                <configuration>
                    <release>11</release>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>exec-maven-plugin</artifactId>
                <version>1.6.0</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>java</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <mainClass>nl.embeddedfitness.praatpaal2.Main</mainClass>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                        <configuration>
                            <archive>
                            <manifest>
                                <mainClass>
                                    nl.embeddedfitness.praatpaal2.Main
                                </mainClass>
                            </manifest>
                            </archive>
                            <descriptorRefs>
                                <descriptorRef>jar-with-dependencies</descriptorRef>
                            </descriptorRefs>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

Я пробовал 4 зависимости JavaFX с классификатором и без него. Но это не имеет значения. Jar-with-dependencies создает jar со всеми зависимостями, кроме зависимостей JavaFX, которые я добавляю во время выполнения с помощью команды java, о которой я упоминал ранее.

Для Java 11 я использую:
https://bell-sw.com/pages/java-11.0.2
64-разрядная версия Microsoft Windows для системы Windows
Linux ARMv7 и 8 32-разрядная версия HardFloat для платы Asus Tinker Board

Для JavaFX 11 я использую:
https://gluonhq.com/products/javafx/
JavaFX Windows SDK для системы Windows
JavaFX armv6hf SDK для Asus Tinker Board


person Fleximex    schedule 22.03.2019    source источник
comment
Можете ли вы попробовать запустить без module-path и add-modules на вашем встроенном устройстве, просто java -jar Praatpaal2-2.0-jar-with-dependencies.jar   -  person José Pereda    schedule 22.03.2019
comment
@ JoséPereda На Tinker Board (а также в системе Windows) это приводит к ожидаемой ошибке: компоненты среды выполнения JavaFX отсутствуют и необходимы для запуска этой ошибки приложения.   -  person Fleximex    schedule 22.03.2019
comment
В Windows это, конечно, ожидается, но не на плате, если вы используете Bellsoft JDK.   -  person José Pereda    schedule 22.03.2019
comment
Также убедитесь, что вы не связали зависимости JavaFX с вашим jar.   -  person José Pereda    schedule 22.03.2019
comment
@ JoséPereda У меня был облегченный вариант (без установленных пакетов JavaFX). С полной версией я начал. Система зависает, но я рассмотрю другую проблему. Это немного странно, поскольку я предполагал, что он все равно будет работать, пока вы указываете на пакеты JavaFX. Для Media я могу использовать дополнительные модули, чтобы указать на GluonHQ (поскольку Bellsoft не имеет этого модуля для сборки ARM). Спасибо за помощь!   -  person Fleximex    schedule 22.03.2019
comment
Проблема в том, что обычные пакеты JavaFX не работают на устройствах ARM. Версия Bellsoft lite не включает JavaFX для ARM, и ее можно получить здесь, но Боюсь, полная версия не включает медиа или Интернет, как и версия Gluon. Для начала попробуйте отключить медиа-часть.   -  person José Pereda    schedule 22.03.2019
comment
@ JoséPereda The Gluon One не включает медиа? Однако в zip-архиве варианта JavaFX armv6hf SDK есть файлы Media и WebKit?   -  person Fleximex    schedule 22.03.2019
comment
Собственные библиотеки не включены. В этом проблема ... Вам понадобится собранный OpenJFX для ARM с включенными медиа и Интернетом.   -  person José Pereda    schedule 22.03.2019
comment
Пожалуйста, не добавляйте такие вещи, как решенный, в заголовок вопроса, и вы не должны добавлять решение к своему вопросу. Если вам удалось решить свою проблему самостоятельно, опубликуйте ответ на свой вопрос с описанием решения. По истечении тайм-аута вы можете принять этот ответ, чтобы указать, что вопрос решен.   -  person Mark Rotteveel    schedule 22.03.2019


Ответы (1)


С помощью Хосе Переда я вспомнил, что установил облегченную версию Bellsoft JDK без модулей JavaFX. Теперь у меня есть полная версия с этими модулями. Я предположил, что они мне не нужны, так как я все равно буду ссылаться на пакеты GluonHQ Java FX (--add-modules).
Bellsoft не содержит JavaFX Media, поэтому сейчас я попытаюсь использовать модули Bellsoft JDK Java FX, но добавьте только Media через --add-modules, хотя может оказаться, что Media просто не существует / не работает для ARM (пока).

person Fleximex    schedule 22.03.2019