Launching a javafx application from a groovy script

Per Nyfelt <[email protected]> Tue, 8 Apr 2025 20:31:08 +0200
Newsgroups gmane.comp.lang.groovy.user
Organization Alipsa HB
Message-ID <[email protected]>
Hi,

I have a javafx application published to a nexus server that I want to 
launch from a groovy script.

The application has javafx jar defined as compileOnly (provided in maven 
lingo) so javafx must be added to the classpath.

When i use a full jdk that includes javafx the applicaton works great 
but for some reason @Grab does not play well with javafx (i have no 
issues with other dependencies)

The script (called gade.groovy) looks like this:

@Grab('org.openjfx:javafx-controls:21.0.6')
@Grab('org.openjfx:javafx-web:21.0.6')
@Grab('org.openjfx:javafx-media:21.0.6')
@Grab('org.openjfx:javafx-swing:21.0.6')
@Grab('se.alipsa:gade:1.0.0-SNAPSHOT')

import se.alipsa.gade.Gade
import org.openjfx.application.Application

this.class.classLoader.URLs.each { url ->
   if (url.toExternalForm().contains("javafx")) {
     println "URL: $url"
   }
}
Application.launch(Gade.class, [] as String[])

Running it with `groovy gade.groovy` results in

unable to resolve class org.openjfx.application.Application
  @ line 21, column 1.
    import org.openjfx.application.Application

If i remove the Application import and Applicaton.launch lines the output is

URL: 
file:/home/username/.groovy/grapes/org.openjfx/javafx-swing/jars/javafx-swing-21.0.6.jar
URL: 
file:/home/username/.groovy/grapes/org.openjfx/javafx-graphics/jars/javafx-graphics-21.0.6.jar
URL: 
file:/home/username/.groovy/grapes/org.openjfx/javafx-base/jars/javafx-base-21.0.6.jar
URL: 
file:/home/username/.groovy/grapes/org.openjfx/javafx-media/jars/javafx-media-21.0.6.jar
URL: 
file:/home/username/.groovy/grapes/org.openjfx/javafx-web/jars/javafx-web-21.0.6.jar
URL: 
file:/home/username/.groovy/grapes/org.openjfx/javafx-controls/jars/javafx-controls-21.0.6.jar

When examining the content of e.g. javafx-controls-21.0.6.jar in the 
grapes cache reveals an essentially empty file (just the META-INF dir) 
which leads me to believe that the transient classifier platform 
implementation jars was not fetched properly and added to the 
classpath.  Does anyone know if there a way to get @Grab to play nicely 
with javafx?


Regards,

Per