Erreur javafx maven

Javaprogrammer43 -  
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   -
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
A voir également:

1 réponse

KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
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
0
Javaprogrammer43
 
J'ai le jdk 15 configuré dans ma variable JAVA_HOME
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020 > 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).
0
Developeur87 > KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention  
 
J'ai généré mon fichier fxml avec scene builder, mais je n'ai pas encore tout configuré dans mon pom.xml .
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020 > 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.
0
Javaprogrammer43 > KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention  
 
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.
0