J'ai essayé de créer un exemple de projet javaFX avec maven et j'obtiens toujours l'erreur ci-dessous.
<?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>org.openjfx</groupId> <artifactId>hellofx</artifactId> <version>1.0-SNAPSHOT</version> <packaging>jar</packaging> <name>hellofx</name> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <mainClass>org.openjfx.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.0.2</version> </dependency> <dependency> <groupId>org.openjfx</groupId> <artifactId>javafx-fxml</artifactId> <version>11.0.2</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>org.openjfx.MainApp</mainClass> </configuration> </plugin> </plugins> </build> </project>
J'ai pris le projet à partir de ce lien:
https://github.com/openjfx/samples/tree/master/ IDE / IntelliJ / Non-Modular / Maven
J'utilise JRE 11. Voici mon pom.xml:
Error:(3, 26) java: cannot access javafx.application.Application bad class file: C:\Program Files\Java\javafx-sdk-11.0.2\lib\javafx.graphics.jar(javafx/application/Application.class) class file has wrong version 54.0, should be 52.0 Please remove or make sure it appears in the correct subdirectory of the classpath.
En passant, la construction de l'exemple d'application JavaFX à partir d'IntelliJ et l'ajout de javafx-sdk-11.0.2 en tant que dépendance génèrent exactement la même erreur.
4 Réponses :
J'ai eu cette erreur, je l'ai corrigée en ajoutant
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>10</source> <target>10</target> <encoding>UTF-8</encoding> </configuration> </plugin> <plugin> <!-- Build an executable JAR --> <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>Main</mainClass> </manifest> </archive> </configuration> </plugin> </plugins> </build>
au fichier pom
J'ai eu le même problème,
Le problème est résolu en supprimant simplement le dossier de l'organisation.
C: \ Temp \ JavaCABuild \ org \ openqa \ selenium \ support \ ui \ Duration.class
il vous suffira peut-être d'aller dans File | ProjectStructure | Project -> Project language Level => 11
si vous faites le réglage du haut, il l'a corrigé pour moi, je pense que c'est la meilleure solution, que s'il y a au lieu d'un onze un six ou quelque chose de inférieur à onze, certaines choses dans javafx pourraient ne pas fonctionner
Si vous rencontrez ce problème dans un autre éditeur, Intellij, vous devrez peut-être simplement trouver le paramètre et le définir sur 11.
voici une image du décor:
J'ai eu un problème similaire dans le passé. Le problème était que java8 était installé sur la machine et utilisé par maven, java11 était la valeur par défaut. La solution était de s'assurer que JAVA_HOME pointe vers l'installation de java11. Vous pouvez exécuter mvn -X
pour voir quel jvm est utilisé pour exécuter maven et quel javac
est utilisé pour compiler le code:
$ mvn -X clean package Apache Maven 3.5.4 (Red Hat 3.5.4-5) Maven home: /usr/share/maven Java version: 1.8.0_272, vendor: Red Hat, Inc., runtime: /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.272.b10-4.el8.x86_64/jre Default locale: en_US, platform encoding: ANSI_X3.4-1968 OS name: "linux", version: "4.18.0-240.el8.x86_64", arch: "amd64", family: "unix" ... ... java.home=/usr/lib/jvm/java-11-openjdk-11.0.9.11-3.el8.x86_64 ...
p >
Avez-vous vérifié que vous utilisez Java 11? Quelle est la sortie de
java -version
?@Slaw java --version dans le terminal dans le répertoire du projet renvoie java 10. Est-ce la bonne façon de le vérifier?
C: \ Users \ qaze \ IdeaProjects \ hellofx2> java --version java 10.0.1 2018-04-17 Java (TM) SE Runtime Environment 18.3 (build 10.0.1 + 10) Java HotSpot (TM) 64- Bit Server VM 18.3 (build 10.0.1 + 10, mode mixte)
Cependant, exécutez les états de configuration JRE 11.@AdamStafiej config peut le demander mais le runtime (JRE 10) ne le prend pas en charge. Vous avez besoin d'un runtime qui le prend en charge.
et au fait: les versions des fichiers de classe peuvent être différentes même avec la même version de JRE - par exemple Les versions plus récentes de la version10 ont des versions de fichiers de classe différentes des anciennes (c'est en fait un peu étrange mais bien vivre n'est pas censé être facile ..)
Je l'ai changé et c'est
openjdk 11 2018-09-25
et javac estjavac 11
. Le plus drôle, c'est que l'erreur n'a que peu changé:Erreur: (3, 20) java: impossible d'accéder à javafx.event.ActionEvent fichier de classe incorrect: C: \ Users \ qaze \ .m2 \ repository \ org \ openjfx \ javafx-base \ 11.0.2 \ javafx-base-11.0.2-w in.jar (javafx / event / ActionEvent.class) le fichier de classe a une mauvaise version 54.0, devrait être 52.0 Veuillez supprimer ou créer Sûr qu'il apparaît dans le bon sous-répertoire du classpath.
Dois-je simplement essayer de faire fonctionner tout sur java 10 à la place?c'est toujours le même: le JRE (java) n'a pas d'importance (rsp il le fait mais ne cause pas) le JDK (javac). J'ai également déjà souligné que les versions des fichiers de classe peuvent être différentes même dans une version majeure de JRE.
voir: bugs.java.com/bugdatabase/view_bug.do?bug_id= JDK-8191510 . pour l'introduction de la version 54 de classfile - en fait déjà dans la nouvelle version 10 JRE - la vôtre est plus ancienne.
@kai Merci. Cela me donne quelque chose avec quoi travailler. Je commençais à me demander si j'avais vraiment besoin d'une sorte de Java du futur.
non, un nouveau jre10 semble suffisant par rapport à l'erreur actuelle, mais je préférerais utiliser un jre11 avec jfx 11 (comme recommandé sur la page jfx).