Переход с JavaFX 1.8 на Java 11 + JavaFX и Maven - PullRequest
0 голосов
/ 05 мая 2020

Я проверял другие вопросы о том же самом topi c, но не смог найти для себя конкретных c ответов.

У нас есть старый проект в Java 8, JavaFX приложение, которое мы создаем для Windows и Ma c. Я не эксперт по Java проектам, и компания, которая разрабатывает приложение, больше не доступна.

Поскольку Apple требует нотариального заверения приложения, нам это удалось. Но недавно они изменили требования, и теперь он не работает: - Бинарный файл использует SDK старше 10.9 SDK - Подпись не включает безопасную временную метку

Это также показано для множества внутренних библиотек (dylib) как Contents / MacOS / App. Но это еще одна проблема, с которой я столкнусь в будущем. Возможно, следуя этим инструкциям: Нотариально заверить существующее Java приложение для MacOS Catalina

Основная проблема в том, что мы пытались скомпилировать проект с Java 11 + JavaFX, но теперь у нас проблемы со сборкой приложение. Примечание: для этого мы просто изменили JDK 8 на JDK 11, а также загрузили и подключили библиотеку JavaFX 11.0.2.

Первая проблема заключалась в невозможности подключения библиотеку JavaFX, но нам удалось сделать это из конфигураций Run / Edit. Он устраняет проблему, но теперь при попытке запуска из Intellij он показывает такие ошибки, как:

Ошибка: (18, 27) java: пакет netscape. javascript не существует

Ошибка: (9, 24) java: пакет org.w3 c .dom. html не существует

java не удается найти символ HTMLAnchorElement

В чем проблема? Эти пакеты удалены из Java 11? Intellij позволяет мне следить за классом и находить контент.

Кроме того, мы используем Maven для создания приложения. Я пробовал редактировать конфигурацию и так далее, добавляя параметры виртуальной машины в Build, Execution, Deployment -> Maven -> Runner, но при попытке упаковать приложение не находит библиотеку JavaFX:

- module-path /path/to/javafx-sdk-11.0.2/lib --add-modules = javafx.controls, javafx.f xml

Как я предполагал чтобы загрузить модуль JavaFX в Maven?

Итак, на данный момент я включил библиотеку JavaFX в Intellij, но не могу запустить из нее и не могу включить JavaFX в Maven.

Я ценю любые рекомендации по этому поводу.

EDIT :

Мне удалось исправить ошибки netscape и HTMLAnchorElement, заменив импорт новыми:

import jdk.nashorn.api.scripting.JSObject;


Element anchorElement = (Element)event.getCurrentTarget();

И исправил проблему с javafx в maven, добавив это в pom. xml file:

    <dependency>
        <groupId>org.openjfx</groupId>
        <artifactId>javafx-base</artifactId>
        <version>11</version>
    </dependency>
    <dependency>
        <groupId>org.openjfx</groupId>
        <artifactId>javafx-controls</artifactId>
        <version>11</version>
    </dependency>
    <dependency>
        <groupId>org.openjfx</groupId>
        <artifactId>javafx-fxml</artifactId>
        <version>11</version>
    </dependency>
    <dependency>
        <groupId>org.openjfx</groupId>
        <artifactId>javafx-graphics</artifactId>
        <version>11</version>
    </dependency>
    <dependency>
        <groupId>org.openjfx</groupId>
        <artifactId>javafx-media</artifactId>
        <version>11</version>
    </dependency>
    <dependency>
        <groupId>org.openjfx</groupId>
        <artifactId>javafx-swing</artifactId>
        <version>11</version>
    </dependency>
    <dependency>
        <groupId>org.openjfx</groupId>
        <artifactId>javafx-web</artifactId>
        <version>11</version>
    </dependency>

Я могу запустить приложение из Intellij, но при попытке упаковать его через Maven я получил следующее:

Проблема: не удалось создать задачу или введите javafx: com.sun.javafx.tools. муравей: развернуть. Причина: Имя не определено

Связано с этим:

                <plugin>
                    <artifactId>maven-antrun-plugin</artifactId>
                    <version>1.8</version>
                    <configuration>
                        <target name="build-app">
                            <ant antfile="./javafx.build.xml"/>
                        </target>
                    </configuration>
                    <executions>
                        <execution>
                            <goals>
                                <goal>run</goal>
                            </goals>
                            <phase>package</phase>
                        </execution>
                    </executions>
                </plugin>

А это javafx.build. xml:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<project basedir="." default="create-app" name="AppName"  xmlns:fx="javafx:com.sun.javafx.tools.ant" xmlns:if="ant:if"
         xmlns:unless="ant:unless">
<taskdef resource="com/sun/javafx/tools/ant/antlib.xml"
         uri="javafx:com.sun.javafx.tools.ant"
         classpath=".;${java.home}/../lib/ant-javafx.jar"/>

<condition property="onmac">
    <os family="mac"/>
</condition>

<condition property="onwin">
    <os family="windows"/>
</condition>

<target name="create-app" description="create jar file fx" if="os.name">
    <echo message="Ant creates javafx app" />

    <fx:deploy width="800" height="600" outdir="target/dist" outfile="App" nativeBundles="image" version="1.4.5">
        <fx:info title="App Name">
            <fx:icon href="installable/mac/logo.icns" kind="default"  if:set="onmac" ></fx:icon>
            <fx:icon href="src/main/resources/resources/logo_256.ico" kind="default"  if:set="onwin"></fx:icon>
        </fx:info>

        <fx:application name="App Name" mainClass="recorder.DesktopRecorder" />
        <fx:resources>
            <fx:fileset dir="target/app-module-1.4.5-distribution" includes="*"/>
        </fx:resources>
    </fx:deploy>


    <exec executable="./installable/mac/create-dmg.sh"  if:set="onmac"/>
    <exec executable="C:\Program Files (x86)\Inno Setup 5\ISCC" if:set="onwin">
        <arg value="installable/windows/innosetup_prod.iss" />
    </exec>

</target>

Я включил файл ant-javafx.jar в проект и изменил его на это:

classpath="./ant-javafx.jar"

Но все равно не удалось создать файл «приложения» Apple:

[ОШИБКА] Не удалось выполнить целевую организацию. apache .maven.plugins: maven-antrun-plugin: 1.8: запустить (по умолчанию) в модуле приложения проекта: Возникла исключительная ситуация Ant BuildException: при выполнении произошла следующая ошибка эта строка:

[ОШИБКА] /path/to/app/javafx.build.xml:24: Ошибка: Bundler «Ma c Application Image» (ma c .app) не удалось создать пакет.

[ОШИБКА] вокруг части Ant ...... @ 4:38 в /path/to/app/target/antrun/build-build-app.xml

1 Ответ

1 голос
/ 05 мая 2020

JavaFX был удален из JDK, начиная с JDK 11. Вы можете выполнить следующие шаги:

https://openjfx.io/openjfx-docs/

Поскольку ваш проект зависит от внешних библиотек, я рекомендую с использованием немодульных форм проектов JavaFX. Если вы используете IntelliJ и Maven, рекомендуется использовать:

JavaFX и IntelliJ -> Немодульный с Maven

или

JavaFX И IntelliJ -> Немодульный с Gradle

Таким образом, вам больше не нужно загружать и прикреплять JavaFX SDK или jmods; Поскольку используемый вами инструмент сборки (Maven / Gradle) автоматически загрузит эти библиотеки и пакеты для вашего проекта.

...