2014-04-17 6 views
2

L'objectif est d'avoir une application Play Framework autonome (2.2) avec une fenêtre d'état supplémentaire contenant des éléments javafx (javafx-8).Ajouter JavaFX (de JDK8) dans sbt (en utilisant le framework de jeu)

Étant donné que les classes JavaFX sont maintenant sur le chemin d'accès par défaut à l'exécution pour une implémentation Oracle Java 8 utilisant javafx. * Dans mes classes et la compilation avec sbt devrait être correcte.

Cependant SBT ne peut pas trouver ces classes et se ferme avec

play.api.UnexpectedException: Unexpected exception[NoClassDefFoundError: javafx/application/Application] 

lors de l'exécution

..\path-to-play-framework-2.2\play project run 

La meilleure façon de résoudre ce problème semble être la modification de build.sbt dans le projet annuaire. Que puis-je faire pour ajouter le chemin (classe) manquant?

Répondre

2

Malheureusement, JavaFX ne lie pas facilement cela à une compilation sbt. Vous devez définir votre variable d'environnement JAVA_HOME et apporter des modifications à votre fichier de construction.

Here J'ai un référentiel où il est configuré. Le bit important si vous utilisez une version de SBT plutôt qu'une construction scala est celui-ci:

unmanagedJars in Compile += Attributed.blank(
    file(System.getenv("JAVA_HOME") + "/jre/lib/jfxrt.jar")), 

fork in run := true 

La raison est que jfxrt.jar est l'archive contenant le moteur d'exécution JavaFX et ne sont pas inclus dans le classpath d'un projet sbt par défaut.

+0

Je suggère de changer le chemin vers jfxrt.jar pour JDK8. Il est disponible sur/jre/lib/ext. Est-il toujours possible d'éviter de définir l'environnement JAVA_HOME? – Vincent

+0

Désolé, je n'ai pas remarqué que vous utilisez JDK8. Le concept devrait être le même de toute façon, vous devez localiser votre fichier jfxrt.jar. L'env JAVA_HOME n'est pas obligatoire mais c'est probablement le moyen le plus couramment utilisé pour obtenir le chemin jre sur un système. Vous pouvez essayer d'autres approches (par exemple copier le fichier jfxrt.jar dans un dossier approprié dans votre projet, fournir le chemin jre par configuration ou essayer de le détecter d'une manière ou d'une autre, etc.), l'important est que sbt sache où se trouve ce pot. et que la commande run forks (car elle ne verra pas les changements que vous faites au classpath). –

+0

Même si j'ai dû modifier ce code et ajouter une solution de repli dans le cas où un JDK/JRE ne sera pas trouvé, je vais marquer cela comme la réponse parce que cela m'a donné la bonne direction. – Vincent

Questions connexes