Skip to main content

Module

Important, soit on utilise les modules dans tout le projet soit pas du tout.

Si on veut vraiment utiliser un vieux jar en module, on peux le recompiler en module. Voir:compile old jar Mais j'ai lu que ça ne fonctionne pas bien.

Compilation et run

Tous les projets contiennent javafx, il faut prendre en compte d'ajouter ces modules.

Grâce à Maven et le plugin javafx-maven-plugin, on peut compiler facilement en module.

Javafx Maven Plugin (autre version pas essayé)

javafx maven Plugin (le vrai)

Avec ce plugin, on peut runner le programme depuis l'ide sans devoir ajouter les modules à la main.

Exemple:

mvn javafx:run

Autrement, il faut les ajouter dans Intellij à la VM

--module-path "C:\Users\pag\Downloads\openjfx-21.0.1_windows-x64_bin-sdk\javafx-sdk-21.0.1\lib"
--add-modules javafx.controls,javafx.base,javafx.fxml

Plus loin, j'explique comment créer un runtime avec les modules de javafx pour ne plus avoir ce problème

Création du runTime

Info pour créer et compiler avec javafx

Avec les modules java, on peut créer un runTime avec jlink. On peut soit le faire avec maven, soit avec un script.

Création d'un runTime personnalisé

Pour créer un runtime personnalisé, il faut utiliser jlink. On ajoute ou supprime des modules si on le souhaite.

jlink --module-path javafxModulesDir  --add-modules java.base,java.compiler,java.datatransfer,java.xml,java.prefs,java.desktop,java.instrument,java.logging,java.management,java.security.sasl,java.naming,java.rmi,java.management.rmi,java.net.http,java.scripting,java.security.jgss,java.transaction.xa,java.sql,java.sql.rowset,java.xml.crypto,java.se,java.smartcardio,java.base,javafx.fxml,javafx.web,javafx.media  --bind-services  --strip-debug --no-man-pages --no-header-files --output mynewjdk

info sur jlink et ici

info sur JDeps

Compilation avec Maven

Pour compiler avec maven, il faut ajouter le plugin dans le pom.xml

        <plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addClasspath>false</addClasspath>
<classpathPrefix>libs/</classpathPrefix>
<mainClass>org.openjfx.MyFirstApp</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.openjfx</groupId>
<artifactId>javafx-maven-plugin</artifactId>
<version>${javafx.maven.plugin.version}</version>
<configuration>
<jlinkImageName>hellofx</jlinkImageName>
<launcher>launcher</launcher>
<mainClass>hellofx/org.openjfx.MyFirstApp</mainClass>
</configuration>
</plugin>

Avec ce plugin, on peut créer automatiquement le runtime qui continent les modules de javafx. Dans l'exemple le runtime s'appelle hellofx. on peut l'utiliser ailleurs si on veut.

mvn javafx:jlink

ou

mvn package

Plus encore, un launcher a été créé. Il permet de lancer le programme sans rien avoir à faire d'autre. Tout le programme est dans le dossier hellofx. Il suffit de lancer le launcher.bat

hellofx/bin/launcher.bat