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é)
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
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