Selon bibliothèque de déploiement JavaFX introuvable dans le JDK actif
J'ai utilisé l'approche José Pereda Maven et cela fonctionne bien dans NetBeans, mais dès que j'essaie de l'exécuter à l'extérieur avec "Java -jar mavenproject1-1.0-SNAPSHOT-jar-with-dependencies.jar", l'erreur suivante apparaît
"Erreur: les composants d'exécution JavaFX sont manquants et sont nécessaires pour exécuter cette application"
Le "md.mavenproject1.MainApp" est juste un nom temporaire pendant que j'essaie de comprendre cela.
Mon fichier pom ressemble à:
<?xml version="1.0" encoding="UTF-8"?>
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>md</groupId>
<artifactId>mavenproject1</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>mavenproject1</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<mainClass>md.mavenproject1.MainApp</mainClass>
</properties>
<organization>
<!-- Used as the 'Vendor' for JNLP generation -->
<name>Your Organisation</name>
</organization>
<dependencies>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-controls</artifactId>
<version>11-ea+25</version>
</dependency>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-fxml</artifactId>
<version>11-ea+25</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<configuration>
<release>11</release>
</configuration>
<dependencies>
<dependency>
<groupId>org.ow2.asm</groupId>
<artifactId>asm</artifactId>
<version>6.1.1</version>
<!-- Use newer version of ASM -->
</dependency>
</dependencies>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.2.1</version>
<executions>
<execution>
<goals>
<goal>Java</goal>
</goals>
</execution>
</executions>
<configuration>
<mainClass>md.mavenproject1.MainApp</mainClass>
</configuration>
</plugin>
<plugin>
<artifactId>maven-Assembly-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<mainClass>md.mavenproject1.MainApp</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
</plugins>
</build>
</project>
Et mon fichier nbactions.xml ressemble à:
<?xml version="1.0" encoding="UTF-8"?>
<actions>
<action>
<actionName>run</actionName>
<goals>
<goal>clean</goal>
<goal>package</goal>
<goal>org.codehaus.mojo:exec-maven-plugin:1.2.1:Java</goal>
</goals>
<properties>
<runfx.args>-jar "${project.build.directory}/${project.build.finalName}.jar"</runfx.args>
</properties>
</action>
<action>
<actionName>debug</actionName>
<goals>
<goal>clean</goal>
<goal>package</goal>
<goal>org.codehaus.mojo:exec-maven-plugin:1.2.1:Java</goal>
</goals>
<properties>
<runfx.args>-Xdebug -Xrunjdwp:transport=dt_socket,server=n,address=${jpda.address} -Dglass.disableGrab=true -jar "${project.build.directory}/${project.build.finalName}.jar"</runfx.args>
<jpda.listen>true</jpda.listen>
</properties>
</action>
</actions>
Toute aide que vous pourrez me fournir sera d’une grande utilité, car j’envisage de passer de l’enfance à la programmation dans le secondaire avec le changement de JavaFX, mais ils voudront pouvoir emporter leurs programmes chez eux. J'utilise OpenJDK 11 sur mon système .
**modifier **
J'ai changé la ligne pour exécuter le programme en:
Java --module-path c:\javafx-sdk-11\lib --add-modules javafx.controls -jar mavenproject1-1.0-SNAPSHOT-jar-with-dependencies.jar
et maintenant je reçois:
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(NativeMethodAccessorImpl.Java:62)
at Java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.Java:43)
at Java.base/Java.lang.reflect.Method.invoke(Method.Java:566)
at javafx.graphics/com.Sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.Java:464)
at javafx.graphics/com.Sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.Java:363)
at Java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at Java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.Java:62)
at Java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.Java:43)
at Java.base/Java.lang.reflect.Method.invoke(Method.Java:566)
at Java.base/Sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.Java:1051)
Caused by: Java.lang.RuntimeException: Exception in Application start method
at javafx.graphics/com.Sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.Java:900)
at javafx.graphics/com.Sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.Java:195)
at Java.base/Java.lang.Thread.run(Thread.Java:834)
Caused by: Java.lang.IllegalAccessError: class com.Sun.javafx.fxml.FXMLLoaderHelper (in unnamed module @0x11a24f71) cannot access class com.Sun.javafx.util.Utils (in module javafx.graphics) because module javafx.graphics does not export com.Sun.javafx.util to unnamed module @0x11a24f71
at com.Sun.javafx.fxml.FXMLLoaderHelper.<clinit>(FXMLLoaderHelper.Java:38)
at javafx.fxml.FXMLLoader.<clinit>(FXMLLoader.Java:2056)
at md.test33.MainApp.start(MainApp.Java:15)
at javafx.graphics/com.Sun.javafx.application.LauncherImpl.lambda$launchApplication1$9(LauncherImpl.Java:846)
at javafx.graphics/com.Sun.javafx.application.PlatformImpl.lambda$runAndWait$12(PlatformImpl.Java:455)
at javafx.graphics/com.Sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.Java:428)
at Java.base/Java.security.AccessController.doPrivileged(Native Method)
at javafx.graphics/com.Sun.javafx.application.PlatformImpl.lambda$runLater$11(PlatformImpl.Java:427)
at javafx.graphics/com.Sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.Java:96)
at javafx.graphics/com.Sun.glass.ui.win.WinApplication._runLoop(Native Method)
at javafx.graphics/com.Sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.Java:174)
... 1 more
Exception running application md.mavenproject1.MainApp
Je pensais qu'en utilisant les dépendances de maven, je n'aurais pas besoin d'utiliser le jdk local. Toute aide que quiconque pourrait donner serait vraiment utile. Si je supprime les dépendances et utilise Oracle Java 10 jdk, le programme et l’exécution en dehors de Netbeans mais avec Java 11, il ne fonctionne que dans. S'il vous plaît aider .
<plugin>
<artifactId>maven-Assembly-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<mainClass>md.mavenproject1.MainApp</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
et au lieu d'utiliser:
<!-- Used to make dependencys needed to run the program -->
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>prepare-package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
<overWriteReleases>false</overWriteReleases>
<overWriteSnapshots>false</overWriteSnapshots>
<overWriteIfNewer>true</overWriteIfNewer>
</configuration>
</execution>
</executions>
</plugin>
<!-- makes the JAR file to run the program outside -->
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.1.0</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>${mainClass}</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
Je pouvais maintenant modifier la ligne de démarrage pour utiliser la bibliothèque JavaFX jointe que j'avais ajoutée au lieu d'utiliser le SDK que j'avais téléchargé.
Java --module-path lib --add-modules javafx.controls --add-exports=javafx.graphics/com.Sun.javafx.util=ALL-UNNAMED --add-exports=javafx.base/com.Sun.javafx.reflect=ALL-UNNAMED --add-exports=javafx.base/com.Sun.javafx.beans=ALL-UNNAMED --add-exports=javafx.graphics/com.Sun.glass.utils=ALL-UNNAMED --add-exports=javafx.graphics/com.Sun.javafx.tk=ALL-UNNAMED -jar mavenproject1-1.0-SNAPSHOT.jar
Je voudrais faire inclure le jre au lieu d'utiliser le local. Si quelqu'un a une idée de ce que ce serait génial.
Une façon de résoudre ce problème consiste à ajouter les arguments suivants à la ligne de commande
--add-exports=javafx.graphics/com.Sun.javafx.util=ALL-UNNAMED
J'ai un problème similaire lors de la création du projet javafx hello world par défaut dans IntelliJ IDEA avec openjdk 11 et openjfx 11. Le travail à effectuer consiste à utiliser la CLI proposée dans la configuration du projet.
Mais dans ce cas, la solution est une sorte de bidouille au lieu d’un correctif de configuration approprié… .. Mon problème était que je n’avais aucun module-info.Java
pour initialiser le module de plate-forme Java approprié. Par conséquent, le module IntelliJ est en fait le module unnamed. Après avoir créé le descripteur de module approprié, le projet n’est plus un module de plate-forme non nommé.
Le problème suivant que j’ai eu est lié à l’utilisation du module de plate-forme Java externe en tant que fichier jar (les bibliothèques openjfx doivent être spécifiques). Ceci doit être résolu en ajoutant libraries dans les paramètres de la structure du projet.
Et puis cela fonctionnera sans aucun argument CLI supplémentaire.