JDK 11 и JavaFX 11: сборка для ARM (Tinker Board) не работает (несоответствие хеша) - PullRequest
5 голосов
/ 22 марта 2019

У меня есть проект 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 управление, 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) отличается ожидаемой хэш (320c5b0ffaf22fec9daf0c3e364f6598631b333fa95015a0f055e1c1c597c05b), записанной в Java.base

Очень мало информации об этом несоответствии хеша.Я подозреваю, что он либо пытается загрузить версию javafx.base.jar для Windows, либо я использую org.openjfx в pom.xml Maven, но обращаюсь к 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
Microsoft Windows 64 бит для системы Windows
Linux ARMv7 & 8 32 бит HardFloat для Asus TinkerПлата

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

1 Ответ

1 голос
/ 22 марта 2019

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

...