Je mets en place un projet maven, qui va utiliser JavaFX. Depuis que j'ai entendu dire que JavaFX n'est pas fourni avec toutes les versions de Java, j'ai téléchargé et mis le jfxrt.jar
fichier dans un répertoire lib
dans mon projet.
1) Comment spécifier que la dépendance (c'est-à-dire JavaFX) ne doit pas être téléchargée, mais qui se trouve dans lib
?
2) Cela signifie-t-il alors que le projet peut être construit sur n'importe quelle machine avec JDK (et pas nécessaire JDK 1.7 - mise à jour 9+)?
Mise à jour 2019 pour les versions récentes de JavaFX
À partir de Java 11, JavaFX a été découplé du JDK, de sorte que les bibliothèques JavaFX ne sont plus automatiquement regroupées avec une installation JDK (comme elles l'étaient par exemple dans la distribution Oracle JDK 8). Au lieu de cela, le système JavaFX est désormais conçu comme un ensemble de bibliothèques distinctes indépendantes du JDK, qui peuvent être téléchargées à partir d'un référentiel par un outil tel que Maven pour une utilisation par votre application.
openjfx.io a un très court tutoriel sur l'utilisation de JavaFX 11+ avec Maven:
Ce didacticiel recommande l'utilisation du Plugin OpenJFX JavaFX Maven et fournit l'exemple de fichier de projet maven pom.xml suivant pour une application de style "hello, world".
<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.openjfx</groupId>
<artifactId>hellofx</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>demo</name>
<url>http://maven.Apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-controls</artifactId>
<version>12.0.1</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.openjfx</groupId>
<artifactId>javafx-maven-plugin</artifactId>
<version>0.0.2</version>
<configuration>
<mainClass>HelloFX</mainClass>
</configuration>
</plugin>
</plugins>
</build>
</project>
Notez que le org.openjfx plugin maven JavaFX utilisé pour Java 11+ est différent du com.zenjava plugin maven JavaFX utilisé pour Java 8 et 9, utilisez donc la version appropriée pour votre Java version.
Approche suggérée
Pour créer des applications JavaFX avec Maven:
Contrairement à Java 7, avec Java 8, il n'est pas nécessaire de définir JavaFX en tant que dépendance maven, car JavaFX se trouve sur le chemin d'accès aux classes d'exécution standard Java Swing c'est aujourd'hui).
Opinion
Je pense que l'approche dans votre question de placer le fichier jfxrt.jar
Dans un répertoire de projet lib
est défectueuse.
Les raisons pour lesquelles il est défectueux sont:
jfxrt.jar
Pourrait les trouver).lib
de votre projet peut ne pas fonctionner avec une version JDK ultérieure, telle que JDK 8.lib
.En résumé, JavaFX doit être traité comme faisant partie du système d'exécution Java et non comme une bibliothèque de projet.
Exemple de dépendance système JavaFX
Si vous devez utiliser Java 7 et que vous ne souhaitez pas utiliser le plug-in JavaFX maven, vous pouvez adopter l'approche la moins recommandée:
lib
) comme une dépendance système maven .Cet exemple est fourni pour Java 7 uniquement et n'est pas requis (et ne fonctionnera pas tel quel) pour Java 8. Java 8, place le jfxrt.jar dans $ {Java.home} /lib/ext/jfxrt.jar, qui se trouve sur le chemin de classe d'exécution Java par défaut, rendant une dépendance système pour Java 8 non pertinente.
<dependency>
<groupId>javafx</groupId>
<artifactId>jfxrt</artifactId>
<version>${Java.version}</version>
<scope>system</scope>
<systemPath>${Java.home}/lib/jfxrt.jar</systemPath>
</dependency>
Si vous empaquetez votre application en utilisant une dépendance système comme celle-ci, vous devrez alors écrire des instructions d'exécution pour vos utilisateurs afin qu'ils puissent ajouter jfxrt.jar au chemin de classe d'exécution lors de l'exécution de votre application sur Java 7 C'est une très bonne raison de ne pas utiliser cette approche.
Si vous choisissez d'utiliser l'approche de dépendance du système maven, vous pouvez également utiliser le maven plugin antrun pour incorporer les appels aux tâches ant JavaFX comme dans = cet exemple . Vous pouvez également utiliser le plug-in mavenforcer pour vous assurer que votre application est construite avec au moins la version minimale requise de Java contenant une version JavaFX requise par votre application pour travail.