проблема с зависимостью javafx при запуске со встроенного файла bat - PullRequest
0 голосов
/ 08 мая 2020

Я создал приложение JavaFX и с помощью maven встроил его в заархивированное приложение, которое будет распространяться (с помощью javafx-maven-plugin). К сожалению, после распаковки и запуска исполняемого файла (файла bat) у меня возникает проблема, связанная с отсутствием зависимостей (я пытался добавить их в свой файл pom ниже, но это не помогло). Есть идеи, чего мне еще не хватает?

локальная конфигурация: OS win 10, openJDK14

Проблема:

    javax.xml.bind.JAXBException: Implementation of JAXB-API has not been found on module path or classpath.
 - with linked exception:
[java.lang.ClassNotFoundException: com.sun.xml.bind.v2.ContextFactory]
        at java.xml.bind@2.3.3/javax.xml.bind.ContextFinder.newInstance(Unknown Source)
        at java.xml.bind@2.3.3/javax.xml.bind.ContextFinder.find(Unknown Source)
        at java.xml.bind@2.3.3/javax.xml.bind.JAXBContext.newInstance(Unknown Source)
        at java.xml.bind@2.3.3/javax.xml.bind.JAXBContext.newInstance(Unknown Source)
        at org.sovap.tagui/org.sovap.tagui.xml.XmlToObject.getFeaturesFromXml(Unknown Source)
        at org.sovap.tagui/org.sovap.tagui.App.init(Unknown Source)
        at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication1(Unknown Source)
        at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(Unknown Source)
        at java.base/java.lang.Thread.run(Unknown Source)
Caused by: java.lang.ClassNotFoundException: com.sun.xml.bind.v2.ContextFactory
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(Unknown Source)
        at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(Unknown Source)
        at java.base/java.lang.ClassLoader.loadClass(Unknown Source)
        at java.xml.bind@2.3.3/javax.xml.bind.ServiceLoaderUtil.nullSafeLoadClass(Unknown Source)
        at java.xml.bind@2.3.3/javax.xml.bind.ServiceLoaderUtil.safeLoadClass(Unknown Source)
        ... 9 more
javax.xml.bind.JAXBException: Implementation of JAXB-API has not been found on module path or classpath.
 - with linked exception:
[java.lang.ClassNotFoundException: com.sun.xml.bind.v2.ContextFactory]
        at java.xml.bind@2.3.3/javax.xml.bind.ContextFinder.newInstance(Unknown Source)
        at java.xml.bind@2.3.3/javax.xml.bind.ContextFinder.find(Unknown Source)
        at java.xml.bind@2.3.3/javax.xml.bind.JAXBContext.newInstance(Unknown Source)
        at java.xml.bind@2.3.3/javax.xml.bind.JAXBContext.newInstance(Unknown Source)
        at org.sovap.tagui/org.sovap.tagui.xml.XmlToObject.getDataFromXml(Unknown Source)
        at org.sovap.tagui/org.sovap.tagui.App.init(Unknown Source)
        at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication1(Unknown Source)
        at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(Unknown Source)
        at java.base/java.lang.Thread.run(Unknown Source)
Caused by: java.lang.ClassNotFoundException: com.sun.xml.bind.v2.ContextFactory
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(Unknown Source)
        at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(Unknown Source)
        at java.base/java.lang.ClassLoader.loadClass(Unknown Source)
        at java.xml.bind@2.3.3/javax.xml.bind.ServiceLoaderUtil.nullSafeLoadClass(Unknown Source)
        at java.xml.bind@2.3.3/javax.xml.bind.ServiceLoaderUtil.safeLoadClass(Unknown Source)
        ... 9 more
App started
Exception in Application start method
java.lang.reflect.InvocationTargetException
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.base/java.lang.reflect.Method.invoke(Unknown Source)
        at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(Unknown Source)
        at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication(Unknown Source)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.base/java.lang.reflect.Method.invoke(Unknown Source)
        at java.base/sun.launcher.LauncherHelper$FXHelper.main(Unknown Source)
Caused by: java.lang.RuntimeException: Exception in Application start method
        at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication1(Unknown Source)
        at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(Unknown Source)
        at java.base/java.lang.Thread.run(Unknown Source)
Caused by: javafx.fxml.LoadException:
/org.sovap.tagui/org/sovap/tagui/fxml/primary.fxml

        at javafx.fxml/javafx.fxml.FXMLLoader.constructLoadException(Unknown Source)
        at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(Unknown Source)
        at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(Unknown Source)
        at javafx.fxml/javafx.fxml.FXMLLoader.load(Unknown Source)
        at org.sovap.tagui/org.sovap.tagui.App.loadFXML(Unknown Source)
        at org.sovap.tagui/org.sovap.tagui.App.start(Unknown Source)
        at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$9(Unknown Source)
        at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runAndWait$12(Unknown Source)
        at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$10(Unknown Source)
        at java.base/java.security.AccessController.doPrivileged(Unknown Source)
        at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$11(Unknown Source)
        at javafx.graphics/com.sun.glass.ui.InvokeLaterDispatcher$Future.run(Unknown Source)
        at javafx.graphics/com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
        at javafx.graphics/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(Unknown Source)
        ... 1 more
Caused by: java.lang.reflect.InvocationTargetException
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.base/java.lang.reflect.Method.invoke(Unknown Source)
        at com.sun.javafx.reflect.Trampoline.invoke(Unknown Source)
        at jdk.internal.reflect.GeneratedMethodAccessor2.invoke(Unknown Source)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.base/java.lang.reflect.Method.invoke(Unknown Source)
        at javafx.base/com.sun.javafx.reflect.MethodUtil.invoke(Unknown Source)
        at javafx.fxml/com.sun.javafx.fxml.MethodHelper.invoke(Unknown Source)
        ... 14 more
Caused by: java.lang.NullPointerException
        at org.sovap.tagui/org.sovap.tagui.controllers.PrimaryController.loadTreeItems(Unknown Source)
        at org.sovap.tagui/org.sovap.tagui.controllers.PrimaryController.initialize(Unknown Source)
        ... 24 more
Exception running application org.sovap.tagui.App

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

<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.sovap</groupId>
    <artifactId>tagui</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx-controls</artifactId>
            <version>14</version>
        </dependency>
        <dependency>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx-fxml</artifactId>
            <version>14</version>
        </dependency>
        <dependency>
            <groupId>jakarta.xml.bind</groupId>
            <artifactId>jakarta.xml.bind-api</artifactId>
            <version>2.3.3</version>
        </dependency>
        <dependency>
            <groupId>org.glassfish.jaxb</groupId>
            <artifactId>jaxb-runtime</artifactId>
            <version>2.3.2</version>
        </dependency>
        <dependency>
            <groupId>com.sun.xml.bind</groupId>
            <artifactId>jaxb-impl</artifactId>
            <version>2.3.3</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.openjfx</groupId>
                <artifactId>javafx-maven-plugin</artifactId>
                <version>0.0.4</version>
                <configuration>
                    <stripDebug>true</stripDebug>
                    <compress>2</compress>
                    <noHeaderFiles>true</noHeaderFiles>
                    <noManPages>true</noManPages>
                    <launcher>tagui</launcher>
                    <jlinkImageName>tagui</jlinkImageName>
                    <jlinkZipName>taguizip</jlinkZipName>
                    <mainClass>org.sovap.tagui.App</mainClass>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

1 Ответ

0 голосов
/ 09 мая 2020

Исправлена ​​проблема, требуя модуля в моем файле информации о модуле проекта:

requires com.sun.xml.bind;

, где модуль com.sun. xml .bind является частью артефакта org.glassfi sh .jaxb: jaxb-runtime Итак, мои новые зависимости pom выглядят так:

<dependencies>
    <dependency>
        <groupId>org.openjfx</groupId>
        <artifactId>javafx-controls</artifactId>
        <version>14</version>
    </dependency>
    <dependency>
        <groupId>org.openjfx</groupId>
        <artifactId>javafx-fxml</artifactId>
        <version>14</version>
    </dependency>
    <dependency>
        <groupId>jakarta.xml.bind</groupId>
        <artifactId>jakarta.xml.bind-api</artifactId>
        <version>2.3.3</version>
    </dependency>
    <dependency>
        <groupId>org.glassfish.jaxb</groupId>
        <artifactId>jaxb-runtime</artifactId>
        <version>2.3.2</version>
    </dependency>
    <dependency>
        <groupId>jakarta.activation</groupId>
        <artifactId>jakarta.activation-api</artifactId>
        <version>1.2.2</version>
    </dependency>
</dependencies>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...