5
votes

"le fichier de classe a une mauvaise version 54.0, devrait être 52.0" lors de la compilation du projet javaFX

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.


9 commentaires

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 est javac 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).


4 Réponses :


2
votes

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


0 commentaires

0
votes

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


0 commentaires

0
votes

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:

 paramètre pour résoudre le problème dans intellij


0 commentaires

0
votes

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 >


0 commentaires