Erreur javafx maven

Signaler
-
Messages postés
16262
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
3 mars 2021
-
Bonjour,
j'ai créé un projet maven avec mon ide(intelijji idea),
et quand je lance le projet j'ai cette erreur:
Error: JavaFX runtime components are missing, and are required to run this application


Voilà mon fichier pom.xml:
<?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.JonathanSoftware</groupId>
  <artifactId>presentation</artifactId>
  <version>1.0-SNAPSHOT</version>

  <name>presentation</name>
  <!-- FIXME change it to the project's website -->
  <url>https://github.com/Jonathan-Software</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.7</maven.compiler.source>
    <maven.compiler.target>1.7</maven.compiler.target>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.openjfx</groupId>
      <artifactId>javafx-controls</artifactId>
      <version>15.0.1</version>
    </dependency>
    <dependency>
      <groupId>org.openjfx</groupId>
      <artifactId>javafx-fxml</artifactId>
      <version>16-ea+6</version>
    </dependency>
  </dependencies>

  <build>
    <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
      <plugins>
        <!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle -->
        <plugin>
          <artifactId>maven-clean-plugin</artifactId>
          <version>3.1.0</version>
        </plugin>
        <!-- default lifecycle, jar packaging: see https://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
        <plugin>
          <artifactId>maven-resources-plugin</artifactId>
          <version>3.0.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.8.0</version>
        </plugin>
        <plugin>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>2.22.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-jar-plugin</artifactId>
          <version>3.0.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-install-plugin</artifactId>
          <version>2.5.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-deploy-plugin</artifactId>
          <version>2.8.2</version>
        </plugin>
        <!-- site lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#site_Lifecycle -->
        <plugin>
          <artifactId>maven-site-plugin</artifactId>
          <version>3.7.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-project-info-reports-plugin</artifactId>
          <version>3.0.0</version>
        </plugin>
        <plugin>
          <groupId>org.openjfx</groupId>
          <artifactId>javafx-maven-plugin</artifactId>
          <version>0.0.5</version>
          <configuration>
            <mainClass>HelloFX</mainClass>
          </configuration>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>
</project>


Et voilà mon fichier fxml:
<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Menu?>
<?import javafx.scene.control.MenuBar?>
<?import javafx.scene.control.MenuItem?>
<?import javafx.scene.control.Separator?>
<?import javafx.scene.control.SeparatorMenuItem?>
<?import javafx.scene.control.ToolBar?>
<?import javafx.scene.image.Image?>
<?import javafx.scene.image.ImageView?>
<?import javafx.scene.layout.AnchorPane?>

<AnchorPane prefHeight="400.0" prefWidth="668.0" xmlns="http://javafx.com/javafx/15.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="org.JonathanSoftware.presentation.controller.MainController">
   <children>
      <ImageView fitHeight="342.0" fitWidth="448.0" layoutX="194.0" layoutY="88.0" pickOnBounds="true" preserveRatio="true">
         <image>
            <Image url="@../ressources/logo_cloudpostman.png" />
         </image></ImageView>
      <MenuBar layoutY="2.0" prefHeight="25.0" prefWidth="852.0">
         <menus>
            <Menu mnemonicParsing="false" text="File">
              <items>
                <MenuItem mnemonicParsing="false" text="About Cloud Postman" />
                  <SeparatorMenuItem mnemonicParsing="false" />
                  <MenuItem mnemonicParsing="false" text="Settings" />
                  <MenuItem mnemonicParsing="false" text="Open messages box" />
                  <MenuItem mnemonicParsing="false" text="Write new message" />
                  <MenuItem mnemonicParsing="false" onAction="#exit" text="Exit" />
              </items>
            </Menu>
            <Menu mnemonicParsing="false" text="Edit">
              <items>
                <MenuItem mnemonicParsing="false" text="Copy" />
                  <MenuItem mnemonicParsing="false" text="Paste" />
                  <MenuItem mnemonicParsing="false" text="Delete" />
                  <MenuItem mnemonicParsing="false" text="Refresh" />
              </items>
            </Menu>
            <Menu mnemonicParsing="false" text="Help">
              <items>
                <MenuItem mnemonicParsing="false" text="Cloud Postman wiki" />
                  <MenuItem mnemonicParsing="false" text="Check for update" />
              </items>
            </Menu>
         </menus>
      </MenuBar>
      <ToolBar layoutY="445.0" prefHeight="51.0" prefWidth="852.0">
        <items>
          <Button mnemonicParsing="false" prefHeight="6.0" prefWidth="50.0">
               <graphic>
                  <ImageView fitHeight="30.0" fitWidth="37.0" pickOnBounds="true" preserveRatio="true">
                     <image>
                        <Image url="@../ressources/new_message_icon.png" />
                     </image>
                  </ImageView>
               </graphic>
            </Button>
            <Button mnemonicParsing="false" prefHeight="38.0" prefWidth="39.0">
               <graphic>
                  <ImageView fitHeight="30.0" fitWidth="42.0" pickOnBounds="true" preserveRatio="true">
                     <image>
                        <Image url="@../ressources/message_box_icon.png" />
                     </image>
                  </ImageView>
               </graphic>
            </Button>
            <Separator orientation="VERTICAL" prefHeight="0.0" prefWidth="9.0" />
            <Button mnemonicParsing="false" prefHeight="38.0" prefWidth="47.0">
               <graphic>
                  <ImageView fitHeight="78.0" fitWidth="25.0" pickOnBounds="true" preserveRatio="true">
                     <image>
                        <Image url="@../ressources/Help_icon.png" />
                     </image>
                  </ImageView>
               </graphic>
            </Button>
            <Button mnemonicParsing="false" prefHeight="38.0" prefWidth="54.0">
               <graphic>
                  <ImageView fitHeight="30.0" fitWidth="43.0" pickOnBounds="true" preserveRatio="true">
                     <image>
                        <Image url="@../ressources/settings_icon.png" />
                     </image>
                  </ImageView>
               </graphic>
            </Button>
        </items>
      </ToolBar>
   </children>
</AnchorPane>


Et ma classe java:
package org.JonathanSoftware.presentation;

import javafx.application.Application;
import javafx.stage.Stage;

public class ViewController extends Application {

    public static void main(String[] args) {
        Application.launch(args);
    }

    @Override
    public void start(Stage primaryStage) {

        primaryStage.show();
    }
}

Merci d'avance pour votre réponse,
Javaprogrammer43

1 réponse

Messages postés
16262
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
3 mars 2021
2 800
Bonjour,

Tu ne vas pas pouvoir faire du JavaFX 15 en codant en Java 7. Dans la documentation de JavaFX 15 il est précisé d'utiliser soit Java 11 (la dernière version LTS), soit Java 15 (la dernière version non LTS).

Dans la rubrique Maven de la documentation tu trouveras un exemple d'archetype pour générer un projet Java FX avec Maven (je viens de tester avec un JDK 11 configuré dans JAVA_HOME)
mvn archetype:generate -DarchetypeGroupId=org.openjfx -DarchetypeArtifactId=javafx-archetype-simple -DarchetypeVersion=0.0.3 -DgroupId=org.openjfx -DartifactId=sample -Dversion=1.0.0 -Djavafx-version=15.0.1
cd sample
mvn clean javafx:run
Messages postés
16262
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
3 mars 2021
2 800 > Javaprogrammer43
Si tu as un JDK 15 d'installé alors ça ne sert à rien de configurer ton projet en Java 7. Modifies le pom.xml pour compiler du Java 15.
<maven.compiler.source>1.15</maven.compiler.source>
<maven.compiler.target>1.15</maven.compiler.target>

Toutefois je te conseille de reprendre la configuration de zéro via l'archetype comme je l'ai indiqué pour vérifier que ta configuration fonctionne bien - y compris sur intellij - avant de commencer à modifier ton projet.
Parce que là avec le peu de code que tu nous montres il y a déjà pas mal de trucs faux, par exemple l'incohérence entre ta classe principale ViewController et la configuration
<mainClass>HelloFX</mainClass>

Ça sent le copier coller, pris de différents codes sur internet, qui n'ont rien à voir ensembles et qui ne sont peut être même pas liés aux mêmes versions de JavaFX (qui débutait à peine à l'époque de Java 7 et a beaucoup changé depuis).
>
Messages postés
16262
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
3 mars 2021

J'ai généré mon fichier fxml avec scene builder, mais je n'ai pas encore tout configuré dans mon pom.xml .
Messages postés
16262
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
3 mars 2021
2 800 > Developeur87
Si je te conseille de d'abord configurer le pom.xml en partant d'un exemple simple c'est pour être sûr que tout fonctionne avant d'aller créer un programme plus étoffé car sinon on ne sait plus d'où vient l'erreur (code, config, IDE ?)
Une fois que la configuration du projet sera stable tu seras sûr que le moindre bug sera uniquement lié à ton code.

Ddans les archetype il y en a également un qui utilise du fxml, c'est peut-être celui-ci que tu devrais tester :
mvn archetype:generate -DarchetypeGroupId=org.openjfx -DarchetypeArtifactId=javafx-archetype-fxml

Tu verras que le pom.xml généré est nettement plus simple que celui que toi tu avais.

Remarque : Pour construire un projet IntelliJ à partir d'un pom.xml tu peux utiliser la commande
mvn idea:idea
qui va générer les fichiers .iml .ipr et .iws de ton projet.
>
Messages postés
16262
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
3 mars 2021

J'ai généré un projet avec cet archétype, et plus aucun problème. Par contre je ne sait toujours pas de quoi venait mon erreur.
Messages postés
16262
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
3 mars 2021
2 800 > Javaprogrammer43
Ça pouvait être tout et n'importe quoi, et à la limite peu importe...
La bonne manière de faire c'est celle qui fonctionne ;-)